0

Когда я обновить мое приложение, я делаю некоторые вещи с моей CoreData модели на старте, а потом я заменяю .sqlite файл упорного магазин использует с:CoreData: Заменить .sqlite вызывает сбой

Все отлично работает, так же, как это допускается. Но когда я закрыть приложение через homebutton, он выходит из строя:

[NSPersistentStoreCoordinator retain]: message sent to deallocated instance 

Я использую ARC ... на самом деле можно сказать, что это не имеет значения, потому что он выходит из строя при закрытии, так что вы не обратите внимание на крах. Но, конечно, это не вариант, и должен быть правильный способ сделать это !?

Любые идеи? Почему сохраняется сообщение, отправленное в NSPersistenStoreCoordinator? Это имеет какое-то отношение к __persistentStoreCoordinator = nil;, но мне нужно его обмануть, иначе он не будет использовать новый .sqlite.

Cheers!

+0

Точка подчеркнутых имена Ивара сделать это очевидным, что вы используете их, когда вам не следует, например поэтому вы не набираете managedObjectContext, когда вы хотите ввести self.managedObjectContext. Это может иметь какое-то отношение к вашей проблеме. Кроме того, что делают ваши не возвращающиеся методы типа доступа? например '[self managedObjectContext]' только на своей собственной линии? – jrturton

ответ

3

Ну, наконец, я нашел лучший (и работает) способом заменить .sqlite & магазина storeCoordinator, в без необходимости всухую в persistentStoreCoordinator:

NSArray *stores = [__persistentStoreCoordinator persistentStores]; 

for(NSPersistentStore *store in stores) { 
    [__persistentStoreCoordinator removePersistentStore:store error:nil]; 
    [[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:nil]; 
} 

NSString *storePath = [[self applicationDocumentsDirectoryString] stringByAppendingPathComponent:@"PictureApp.sqlite"]; 

NSURL *storeUrl = [NSURL fileURLWithPath:[[self applicationDocumentsDirectoryString] stringByAppendingPathComponent:@"PictureApp.sqlite"]]; 

NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"PictureApp" ofType:@"sqlite"]; 
if (defaultStorePath) { 
    [[NSFileManager defaultManager] copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; 
} 

NSError *error = nil; 
[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]; 
+0

вы понятия не имеете, сколько вы мне помогли .. спасибо тонну. Я бы дал тебе обнять мужчину. Огромное спасибо. –

Смежные вопросы