2014-06-30 41 views
-1

我需要一次向多個對象發送消息,然後將值傳回給每個對象。一次只能使用一個代表,並且通知不能返回值。通知多個視圖控制器並將值傳遞迴通知者

是否有任何方式,包含兩個視圖控制器的選項卡欄控制器可以通過返回值同時通知他們兩個?

+0

你可以通過使用通知中的值... –

+0

@SunnyShah以及如何使用通知返回值? –

+0

@ S.J爲什麼你不能簡單地用一些方法來包裝它,它會返回你需要的值,但也會發送一個通知?如果我瞭解問題... – fgeorgiew

回答

0

您可以創建一個鍵值對,並通過在通知的用戶信息字典:

[[NSNotificationCenter defaultCenter] postNotificationName:myNotification object:nil userInfo:myDictionary]; 

在該方法中,你處理的通知:

- (void)handleMyNotification:(NSNotification *)notification 
{ 
    NSDictionary *myDictionary = notification.userInfo; 
} 
+0

以及如何返回值使用通知? –

+0

這些值在您的字典中。感謝您的反對票。 – Steve

0

你可以通過用戶信息字典通知:

NSDictionary *dataDict = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:isReachable] 
               forKey:@"isReachable"]; 

[[NSNotificationCenter defaultCenter] postNotificationName:@"reachabilityChanged" object:self userInfo:dataDict]; 

看來,問題是不同的,然後我認爲之前。如果你只是想後立即發送通知和返回一定的價值,它發送通知的對象裏面,我可能會用一些方法

- (NSString *)notifyAboutSomethingFancy 
{ 
    //the code from above 
    return @"whatever you want to return"; 
} 
0

您可以使用NSNotification包裹,價值傳遞給不同的控制器

檢查相關鏈接。

pass data in the userDictionary

+0

在投票之前,你應該確定答案是錯誤的。根據你的低估不要投票。 –

+2

我絕對同意@Sunny,它是否解決問題,但是投票是不合理的 –

1

我假設的問題是如何有通知的收件人發送一個響應返回給該通知的發件人。

你不能從通知中返回一個值。但是通知處理程序可以在原始對象中調用一個方法來提供任何想要傳回的數據。

一種方法是提供object參數postNotificationName,該參數指定誰發送了通知。然後有objectnotificationSender)符合一些協議與一些建立的API。例如,定義爲方法的協議的視圖控制器將調用:

@protocol MyNotificationProtocol <NSObject> 

- (void)didReceiveNotificationResponse:(NSString *)response; 

@end 

然後,發出該通知的對象將符合本協議:

@interface MyObject : NSObject <MyNotificationProtocol> 
@end 

@implementation MyObject 

- (void)notify 
{ 
    NSDictionary *userInfo = ...; 

    // note, supply a `object` that is the `notificationSender` 

    [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationName object:self userInfo:userInfo]; 
} 

- (void)didReceiveNotificationResponse:(NSString *)response 
{ 
    NSLog(@"response = %@", response); 
} 

@end 

然後,視圖控制器接收該通知可以使用NSNotification對象的object參數發送響應:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:kNotificationName object:nil]; 
} 

- (void)dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

- (void)didReceiveNotification:(NSNotification *)notification 
{ 
    id<MyNotificationProtocol> sender = notification.object; 

    // create your response to the notification however you want 

    NSString *response = ... 

    // now send the response 

    if ([sender conformsToProtocol:@protocol(MyNotificationProtocol)]) { 
     [sender didReceiveNotificationResponse:response]; 
    } 
} 

在上述例子中,第e響應是NSString,但您可以使用任何類型的參數到didReceiveNotificationResponse,或者添加其他參數(例如,響應的sender)。

相關問題