0
我想更新從核心數據這樣的表視圖:從後臺線程更新表視圖?
dispatch_queue_t request_queue = dispatch_queue_create("com.myqueue.qu", NULL);
dispatch_async(request_queue, ^{
NSManagedObjectContext *parent = [[CoreDataManager instance] managedObjectContext];
NSManagedObjectContext *searchContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:parent.concurrencyType];
[searchContext setPersistentStoreCoordinator:[[CoreDataManager instance] persistentStoreCoordinator]];
NSArray * array = ...// receive array from CoreData, just select, there is no changes
if (array.count > 0) {
dispatch_async(dispatch_get_main_queue(), ^{
block(array);
});
}
else {
dispatch_async(dispatch_get_main_queue(), ^{
block(nil);
});
}
});
dispatch_release(request_queue);
在塊我做的:
_tableViewData = [array mutableCopy];
[self.tableView reloadData];
但在:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
我的OBJ:
MyObj *obj = _tableViewData[indexPath.row];
無字段。所以obj是空的。
編輯:
我試過,而無需創建「searchContext」進行搜索,使用parentContext和更新的tableView確定,是不是正確的方式?
dispatch_queue_t request_queue = dispatch_queue_create("com.myqueue.qu", NULL);
dispatch_async(request_queue, ^{
NSManagedObjectContext *parent = [[CoreDataManager instance] managedObjectContext];
NSArray * array = ...// receive array from CoreData, using parent as search context
...
感謝您的回答,如果我要在主要環境中進行搜索,是否正確?我的意思是:NSManagedObjectContext * parent = [[CoreDataManager實例] managedObjectContext];不創建searchContext。我試過了,它更新了tableview。 –
只有在主線程上運行搜索。每個線程應該使用自己的上下文。你只是通過使用主線程上下文而作弊,因爲你不編輯任何東西,但它不被推薦或完全可靠。 – Wain