我观察到填充联系人需要一段时间的数据:
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
tableView
? cellForRowAtIndexPath
甚至在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
?