Так что это отстой. Попытка заполнить базу данных основных данных информацией из NSDictionaries.
Я открываю UIManaged Document с использованием приведенного ниже кода, затем блок обработчика завершения вызывает метод, который рекурсивно заполняет словарь из API и добавляет для каждой сущности базу данных.
Файл базы данных создается просто отлично, словарь заполняется нормально, и объект сущности также заполняется, но по какой-то причине информация не записывается в базу данных, хотя иногда она работала, я не уверен если что-то было иначе.
В консоли появляется сообщение:
«NSFileCoordinator: Обнаружена неожиданная ошибка сервера. Детали: соединение неверно»
всякий раз, когда выполняются методы openWithCompletionHandler или saveToURL: forSaveOperation: withCompletionHandler.
Я не могу понять, почему приведенный ниже код не работает, учитывая, что он вырезан и вставлен из курса Стэнфордского iphone.
Я пытался удалить приложение из симулятора, но без разницы. Это разрушало мою голову часами, любая помощь оценена, спасибо.
+ (void)populateDatabase
{
// Get URL -> "<Documents Directory>/<TrailerDB>"
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"TrailerDB"];
UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:url];
// If document exists on disk...
if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]])
{
[doc saveToURL:url
forSaveOperation:UIDocumentSaveForCreating
completionHandler:^(BOOL success)
{
if (success) [self fillDatabase:doc.managedObjectContext];
if (!success) NSLog(@"couldn’t open document at %@", url);
}];
} else {
if (doc.documentState == UIDocumentStateClosed) {
// exists on disk, but we need to open it
[doc openWithCompletionHandler:^(BOOL success)
{
if (success) [self fillDatabase:doc.managedObjectContext];
if (!success) NSLog(@"couldn’t open document at %@", url);
}];
} else if (doc.documentState == UIDocumentStateNormal)
{
[self fillDatabase:doc.managedObjectContext];
}
}
}