/ / IOS: Премахване на постоянна памет в многопоточна реализация на CoreData - ios, object-c, core-data

IOS: Премахване на устойчиво съхранение в многоредово изпълнение на CoreData - ios, objective-c, core-data

Многопоточността определено е сложно нещо.

Имам основна нишка (AppDelegate), а след това мояПриложението започва да изпраща няколко други заявки за синхронизиране на някои данни според някои потребителски действия. Данните четат и променят CoreData. Управляван обект Conext се създава във всяка нишка, както казва Apple.

Проблемът е, че "функцията за нулиране на база данни". Този, който просто ще премахне всички данни, съхранявани локално.

Правя това, като премахна постоянния магазин в AppDelegate така:

- (bool) resetCoreData
{

//Remove the persistent Store.
NSError *error;
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"insight.sqlite"];
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];

//Borrar los conextos para que el APP lo cree despues
for (NSManagedObject *ct in [self.managedObjectContext registeredObjects]) {
[self.managedObjectContext deleteObject:ct];
}



NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:

[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,

[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

//Make new persistent store for future saves
if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
// TODO: handling
}

return true;

}

Тогава, ако опитате да изтеглите данни от някаква друга тема:

 *** Terminating app due to uncaught exception "NSObjectInaccessibleException", reason: "CoreData could not fulfill a fault for "0x1edba090 <x-coredata://5EAC46F6-54DA-480B-9B15-CB28248FD1CE/PlanResults/p7>""

Мисли?

Отговори:

1 за отговор № 1

Трябва да освободите всички NSManagedObjectContext обекти, преди да изтриете NSPersistentStoreCoordinator обект. Това трябва да се случи за всички NSManagedObjectContext обекти във всички нишки. NSManagedObjectContext Обектите имат свойство persistentStoreCoordinator.

След изтриване на NSPersistentStoreCoordinator След това можете да създадете отново файла NSManagedObjectContext обекти.