Основные данные "Соединение недействительно" - PullRequest
0 голосов
/ 16 февраля 2012

Так что это отстой. Попытка заполнить базу данных основных данных информацией из 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];
    }
}
}

1 Ответ

3 голосов
/ 16 февраля 2012

После fillDatabase попробуйте вызвать этот метод:

[doc saveToURL:doc.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success)
 {
    if (success == NO)
    {
       NSLog(@"Save operation failed!");
    }
 }];
...