【发布时间】:2013-10-17 19:27:29
【问题描述】:
我的应用中有一个 UITableview 控制器和一个视图控制器,我正在尝试使用 NSNotificationCenter 将 NSDictionary 从 UITableview 控制器传递到我的 ViewController。所以,我在我的 UITableview 控制器上推送一个通知,然后我添加一个观察者,在我的 ViewController 上使用一个选择器。选择器被调用,但我有一个 NSLog 并获得内存结果,比如:
视图控制器:0x8a0bcc0
我尝试传递 NSString 而不是 NSDictionary ,但我再次得到内存结果,而不是字符串的值。
我的代码:
UITableView 控制器
NSString *string=@"This is a test string";
[[NSNotificationCenter defaultCenter] postNotificationName: @"Update" object: string];
视图控制器
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(incomingNotification:) name:@"Update" object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"Update" object:self];
这里是incomingNotification选择器方法:
-(void) incomingNotification : (NSNotification *)notification{
NSLog(@"Trying to print : %@",[notification object]);
}
所有通知都发生在 ViewDidLoad 方法中。谢谢!
更新
最后,我退出了使用 NSNotificationCenter 并使用属性来传递数据,稍微改变了我的 TableViewController 的继承性。不知道为什么通知不起作用,因为他们应该这样做。谢谢大家,非常感谢您的建议和想法:)
【问题讨论】:
-
为什么在添加观察者后立即在
ViewController中发布第二条通知?这就是为什么你在控制台中得到这个字符串的原因。为什么没有测试字符串呢 - 确保在表控制器中发布通知之前添加观察者(设置断点以观察它们的顺序) -
您在 ViewController 中使用对象 self 调用 postNotification,因此打印出来的是您自己的对象。
-
如果我删除 ViewController 中的第二个通知,则不会调用选择器方法!我现在尝试设置断点!
-
更新:我很确定这个问题会发生,因为首先我发布了通知,然后我添加了观察者(执行顺序问题)。有没有办法解决它?我应该首先发布通知然后解析它。我可以添加一个观察者,发布通知(在我的 TableViewController 上)然后从我的 ViewController 解析它吗?
标签: ios objective-c nsnotificationcenter nslog