我使用以下代碼從Web服務加載數據並將其存儲在Core Data數據庫中。CoreData和Threading
dispatch_queue_t fetchQ = dispatch_queue_create("fetcher", NULL);
dispatch_async(fetchQ, ^{
NSArray *list = [WebService loadData];
dispatch_sync(dispatch_get_main_queue(), ^{
if (list != nil) {
for (NSDictionary *data in list) {
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Object" inManagedObjectContext:appDelegate.coreDataDatabase.managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id = %i", [[data objectForKey:@"id"] integerValue]];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *data = [appDelegate.coreDataDatabase.managedObjectContext executeFetchRequest:request error:&error];
Object *object = [data objectAtIndex: 0];
if (object == nil) {
object = [NSEntityDescription insertNewObjectForEntityForName:@"Object" inManagedObjectContext:appDelegate.coreDataDatabase.managedObjectContext];
object.id = [NSNumber numberWithInteger:[[data objectForKey:@"id"] integerValue]];
}
object.name = [data objectForKey:@"name"];
}
[appDelegate.coreDataDatabase saveToURL:appDelegate.coreDataDatabase.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:nil];
}
});
});
dispatch_release(fetchQ);
該代碼是簡化的,但它應該代表序列。對Web服務的訪問在後臺運行。之後,商店在主線程中被調用。實際上應該沒問題吧?
不幸的是,整個作品不是在所有設備上。在我的所有設備和大多數其他設備上,沒有任何問題。 在一些,但顯然是如此,因爲不幸的是,商店裏有一些負面的Bewertugnen和一些問題。 的問題是,他發現一個已經存在的記錄在數據庫中,而不是不斷有新的投資
感謝您的幫助, 斯特凡
,如果你明確的最後一句話這將有助於。我不明白那一部分。 –