如何在tableView中使用观察到的数据?

时间:2019-10-09 20:00:57

标签: objective-c xcode uitableview closures observable

我观察到填充联系人需要一段时间的数据:

NSNotificationCenter *notification = [NSNotificationCenter defaultCenter];

[notification addObserver:self selector:@selector(tableView: cellForRowAtIndexPath:) name:@"refreshContactList" object:nil];

-(void)contactsCallback {
    contacts = [[[InternalContactsHandler sharedBuffer] contacts] sortedArrayUsingSelector:NSSelectorFromString(@"nameOfContactCompare:")];
}

它很好用,但是如何在contacts中实际使用array tableViewcellForRowAtIndexPath甚至在viewWillAppear之前触发,所以当我的observer填充到我的array cellForRowAtIndexPath时,便已经完成。

我尝试使用completion handler,但我想我可能会误解它应该如何工作:

cellForRowAtIndexPath中,我运行一个带有callback的函数,并带有要用于cell的数据:

[self getContactsData:^ {
    //Just to see if it worked
    NSLog(@"?%lu Contacts CallBack", (unsigned long)[[[InternalContactsHandler sharedBuffer] contacts] count]);
}];

函数:

-(void)getContactsData:(void(^)(void))callback {
    NSNotificationCenter *notification = [NSNotificationCenter defaultCenter];
    [notification addObserver:self selector:@selector(contactsCallback) name:@"refreshContactList" object:nil];

    callback();
}

现在应该在 之后callback触发observer的填充后触发我的世界contacts,但显然无法正常工作。 callback()仍在侦听更改时触发observer,因此cellForRowAtIndexPath中的contacts为0,并在observer完成之前运行,而{{ 1}}在observer之后完成。

那么,如何将填充的callback数据放入contacts

0 个答案:

没有答案