2
コアデータを同時に正しく使用する方法を見つけるのが難しいです。コアデータ、同時実行性、GCD
更新があるたびに新しいデータを追加する前に、エンティティのコアデータをクリアする必要があります。そこで私は、このスニペットを使用することにしました:
-(void)addSale:(NSArray *)results{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *entity = @"Sale";
CoreDataManager.sharedInstance.delegate = self;
dispatch_async(dispatch_get_main_queue(), ^{
[CoreDataManager.sharedInstance deleteEntityWithName:entity];
});
NSManagedObjectContext *privateContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
privateContext.parentContext = CoreDataManager.sharedInstance.managedObjectContext;
for (NSDictionary *dataDictionary in [results valueForKey:@"Sales"])
{
NSManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:entity inManagedObjectContext:privateContext];
// Fill ManagedObject
// .....
}
NSError *error;
[privateContext save:&error];
if (error != nil) {
NSLog(@"Couldn't save private context bcoz of %@\n%@", error, error.localizedDescription);
}
dispatch_async(dispatch_get_main_queue(), ^{
// Save Main ManagedObjectContext
[CoreDataManager.sharedInstance saveContext:CoreDataManager.sharedInstance.managedObjectContext WithEntityName:entity];
});
});
}
問題は、私はコアデータ上の任意の影響をせずに応答UIを維持しながら2つの他のエンティティのために同じことをしなければならないということです。
これを処理する方法はありますか?