У меня следующая проблема:
У меня есть приложение с UITableView в качестве корневого представления. В этом tableView есть разные записи, и для каждой записи (которая может быть создана пользователем) я также добавляю постоянное хранилище в свое приложение.
Таким образом, когда я запускаю приложение с нуля (без сохраненных данных и т. д.) и добавляю запись, также создается хранилище persistenceStore, и когда я нажимаю на tableViewCell, я могу сохранить данные в этом сгенерированном хранилище persistenceStore. Это отлично работает, если я создаю запись, а также просматриваю запись во время одного запуска.
НО
Если я закрою приложение и запущу снова, щелкнув ту же запись, я получу следующее сообщение об ошибке:
NSFetchRequest *allUsers = [[NSFetchRequest alloc] init];
[allUsers setAffectedStores:[NSArray arrayWithObject:[[self.tableViewContext persistentStoreCoordinator] persistentStoreForURL:storeURL]]];
* Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: "* -[NSArray initWithObjects:count:]: попытка вставить нулевой объект в объекты [0]"
Итак, кажется, что я хочу добавить магазин, который на самом деле равен нулю, потому что (я так думаю) система не может найти ни одного магазина по этому заданному storeURL (который совпадает с тем, где я создал магазин при первом запуске) .
Итак, я предполагаю, что во втором прогоне persistenceStore нет, поэтому он не сохраняется должным образом в первом прогоне, где он был создан.
Итак, как я могу сохранить персистентное хранилище после его добавления в персистентсторекоординатор?
Обновление:
Кажется, я определил основную проблему. ПостоянныйStoreCoordinator изменился после первого запуска. Итак, как мне сохранить все эти вещи (managedObjectContext, persistenceStoreCoordinator) перед закрытием приложения?
Кто-нибудь может мне помочь?
Обновление 2
Вот как я создаю магазин:
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [searchPaths objectAtIndex:0];
NSString* storeFileName = [NSString stringWithFormat:@"%@",newItem.name];
NSURL *storeURL = [NSURL fileURLWithPath:[documentPath stringByAppendingPathComponent:storeFileName]];
NSError* saveToStoreError;
if(![[self.addContext persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&saveToStoreError]){
NSLog(@"Error: %@, %@", saveToStoreError, [saveToStoreError userInfo]);
abort();
}
else
{
NSError *saveStoreError;
if(![self.addContext save:&saveStoreError])
{
NSLog(@"Saving Data wasn't possible!");
}
}
Обновление 3 Итак, после продолжительного тестирования вот мои результаты:
- Создание магазинов работает нормально. Я могу создать несколько хранилищ, а также получить к ним доступ и заполнить их, если я нахожусь в одном запуске своего приложения.
Так что что-то меняется с перезапуском моего приложения. Я думаю, что ошибка должна быть связана с ManagedObjectContext, PermanentStoreCoordinator или СОХРАНЕНИЕМ хранилищ.
Должен ли я изменить какие-либо параметры в моем делегате приложения для настройки manageObjectContext или persistenceStoreCoordinator?
Спасибо!