addObserver问题,尝试检查数据是否已加载

时间:2010-07-01 12:49:35

标签: iphone objective-c ipad

我有一个ViewController初始化另一个类,它将数据加载到一个可变数组中并将其作为属性保存在自身上。

这是我的ViewController初始化代码:

-(id) initWithCollectionID:(NSString *)aCollectionID {
    if (self = [super init]){
        collectionID=aCollectionID;
        dataSource = [[CollectionListDataSource alloc] initWithCollectionID:collectionID];
    }
    return self;
}

一旦dataSource将所有数据加载到其属性dataSource.collectionItems中,我设置dataSource.loaded = @“true”;

如何使用addObserver来监视该值并触发我的ViewController中的函数?

像我这样的假设:

[self addObserver:dataSource forKeyPath:@"loaded" options:NSKeyValueChangeNewKey context:nil];

那我该怎么办?

1 个答案:

答案 0 :(得分:1)

当您的代码立即生效时,无论您是否使用通知,它都会暂停,直到数据加载为止。它不会过去:

dataSource = [[CollectionListDataSource alloc] initWithCollectionID:collectionID];

...直到CollectionListDataSource对象完成了自己的初始化(我假设也意味着加载其数据)并返回自己的实例。

如果希望在视图控制器继续初始化时加载CollectionListDataSource对象,则需要将CollectionListDataSource对象放在另一个线程上。但是,您不能在单独的线程上运行属性对象。

你很少需要跳过这样的箍。除非这个数组非常大(10k +对象),否则你很可能不必担心。在大多数情况下,在视图可以运行之前需要数据,因此没有数据就没有必要让视图继续运行。

如果确实需要观察另一个对象的属性,请参阅Key-Value Programming Guide: Registering For Key-Value Observing了解详细信息。