iOS:一个视图可以看到在另一个视图中创建的对象

时间:2012-08-04 23:03:45

标签: objective-c ios

G'day all,

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

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

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

ViewControllerB如何访问myObject的属性? ViewControllerB如何识别ViewControllerA创建的对象?

谢谢,

2 个答案:

答案 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...
}