0

万事如意,

我一直在阅读有关在控制器之间传递数据的协议和委托。

假设 ViewControllerA 在一个对象上创建一个实例:

myObject = [[anObject alloc]init];
[myObject setProperty: value];

ViewControllerB 如何访问 myObject 的属性?ViewControllerB 如何知道 ViewControllerA 创建的对象?

谢谢,

4

2 回答 2

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];
于 2012-08-04T23:19:11.670 回答
1

您可以使用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...
}
于 2012-08-04T23:25:21.080 回答