万事如意,
我一直在阅读有关在控制器之间传递数据的协议和委托。
假设 ViewControllerA 在一个对象上创建一个实例:
myObject = [[anObject alloc]init];
[myObject setProperty: value];
ViewControllerB 如何访问 myObject 的属性?ViewControllerB 如何知道 ViewControllerA 创建的对象?
谢谢,
万事如意,
我一直在阅读有关在控制器之间传递数据的协议和委托。
假设 ViewControllerA 在一个对象上创建一个实例:
myObject = [[anObject alloc]init];
[myObject setProperty: value];
ViewControllerB 如何访问 myObject 的属性?ViewControllerB 如何知道 ViewControllerA 创建的对象?
谢谢,
如果 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];
您可以使用NSNotificationCenter
让有兴趣的人了解新对象。
通常这是在模型层完成的,例如我有一个Person
对象。在.h 文件
中定义“新人创建通知”Person
extern NSString *const NewPersonCreatedNotification;
在 .m 文件中
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...
}