G'day all,
我一直在阅读有关在控制器之间传递数据的协议和委托。
假设ViewControllerA在对象上创建实例:
myObject = [[anObject alloc]init];
[myObject setProperty: value];
ViewControllerB如何访问myObject的属性? ViewControllerB如何识别ViewControllerA创建的对象?
谢谢,
答案 0 :(得分:2)
如果B在A之后(即它们是分层的)你可以将对象传递给B(在创建它之后或在prepareForSegue
中:
bController.objectProperty = myObject;
如果两者同时对用户有效(例如通过标签栏),则可以使用通知。这与代表的不同之处在于关系更宽松 - 发送对象不必了解接收对象的任何信息。
// in A
[[NSNotificationCenter defaultCenter]
postNotificationName:ObjectChangedNOtificationName
object:self
userInfo:dictionaryWithObject];
// in B
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(objectChanged:)
name:ObjectChangedNOtificationName
object:nil];
答案 1 :(得分:1)
您可以使用NSNotificationCenter
让有兴趣了解新对象的人
通常这是在模型层中完成的,例如我有一个Person
对象
在Person
.h文件中定义“新人创建通知”
extern NSString *const NewPersonCreatedNotification;
<。>文件中的
NSString *const NewPersonCreatedNotification = @"NewPersonCreatedNotification";
创建人员时(在init方法中)发布通知
[[NSNotificationCenter defaultCenter] postNotificationName:NewPersonCreatedNotification
object:self
userInfo:nil];
然后,无论谁想知道创建的新人都需要观察这些通知,例如ViewControllerA想知道,所以在我的init方法中我做了:
- (id)init
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNewPersonCreatedNotification:)
name:NewPersonCreatedNotification
object:nil];
}
return self;
}
- (void)handleNewPersonCreatedNotification:(NSNotification *)not
{
// get the new Person object
Person *newPerson = [not object];
// do something with it...
}