2016年3月21日 星期一

NSNotificationCenter

一般來說傳值可以透過segue,delegate等等

但是有時候會碰到一些情況,可能無法順利用segue傳值,

而且可能會碰到一些情況,需要app先替你做一些事情,例如藍牙掃描,等到有值的時候再做傳送,

這時候可以用NSNotificationCenter來做處理


首先:先註冊一個通知


[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didEnterField:) name:@"iii" object:nil];

不得不說,註冊聽起來怪怪,但是很生動,

上面翻成白話就是說,我想要知道通知中心有變動時,請通知我(self),我先註冊起來了歐!!要讓我知道歐!!xd~


下面就是實際的通知送出:

[[NSNotificationCenter defaultCenterpostNotificationName:@"iii" object:self.myTextField.text];

這邊把我的值(myTextField)送出來,

然後回到上面的selector裡面:

-(void)didEnterField: (NSNotification *)notify
{
    NSString *string = [notify object];
    NSLog(@"iii: %@",string);
    self.mylabel.text = string;
    
}

在這邊附值把我接到的通知到的值給予我要給予的物件




************************



另外說到,如果我現在有多個物件要傳遞的時候呢!?

基本上在addObserver和postNotificationName

都一樣,只是name要改一下字串,

然後在@selector這個方法內要改一下(用name 的字串來分辨是哪一個)


if ([notification.name isEqualToString:@"major"]) {
        NSLog(@"allCharacteristicWithNotify%@",[notification object]);
    } else if ([notification.name isEqualToString:@"minor"]) {
        NSLog(@"allCharacteristicWithNotify%@",[notification object]);

    }

希望有所幫助

沒有留言:

張貼留言