2015-10-29 5 views
0

при попытке сохранить управляемый объект со следующей конфигурацией в координатору постоянного хранения:Основные данные Управляемый объект не может сохранить контекст (ошибка 134030)

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ParallelPhotosModel.sqlite"]; 
NSError *error = nil; 
NSString *failureReason = @"There was an error creating or loading the application's saved data."; 
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { 

я получаю следующее сообщение об ошибке:

Unresolved error Error Domain=NSCocoaErrorDomain Code=134030 "An error occurred while saving." UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/9FCED2FF-F976-4780-8192-208519C8CD11/Documents/ParallelPhotosModel.sqlite, NSAffectedStoresErrorKey=( " (URL: file:///var/mobile/Containers/Data/Application/9FCED2FF-F976-4780-8192-208519C8CD11/Documents/ParallelPhotosModel.sqlite)" ), NSUnderlyingError=0x127335c50 {Error Domain=NSCocoaErrorDomain Code=4 "The file doesn’t exist." UserInfo={NSUnderlyingError=0x12732a670 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/9FCED2FF-F976-4780-8192-208519C8CD11/Documents/ParallelPhotosModel.sqlite}}}}}, { NSAffectedStoresErrorKey = ( " (URL: file:///var/mobile/Containers/Data/Application/9FCED2FF-F976-4780-8192-208519C8CD11/Documents/ParallelPhotosModel.sqlite)" ); NSFilePath = "/var/mobile/Containers/Data/Application/9FCED2FF-F976-4780-8192-208519C8CD11/Documents/ParallelPhotosModel.sqlite"; NSUnderlyingError = "Error Domain=NSCocoaErrorDomain Code=4 \"The file doesn\U2019t exist.\" UserInfo={NSUnderlyingError=0x12732a670 {Error Domain=NSPOSIXErrorDomain Code=2 \"No such file or directory\" UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/9FCED2FF-F976-4780-8192-208519C8CD11/Documents/ParallelPhotosModel.sqlite}}}"; }

Какова основная проблема здесь и как мне ее избежать? Я где-то видел, что аналогичная ошибка появляется при попытке сохранить внутри пакета приложений, но использование storeURL i m было взято из учебника (то есть каталога документов).

UPDATE:

быть более точным, я вставляю, где именно NSManagedObjectContext должен позволить мне сохранить, но это не делает:

NSManagedObjectContext *context = [appDelegate managedObjectContext]; 

    for (DBMetadata *file in metadataContents) { 
     NSString *photo_info = [file photo_info]; 
     if (photo_info != nil) { 
      NSNumber *day_taken = [self extractDayFromString: photo_info]; 
      NSNumber *month_taken = [self extractMonthFromString: photo_info]; 
      NSNumber *year_taken = [self extractYearFromString: photo_info]; 
      NSString *db_path = [file path]; 
      NSManagedObject *parallelPhoto = [NSEntityDescription 
               insertNewObjectForEntityForName:@"ParallelPhotos" 
               inManagedObjectContext:context]; 
      [parallelPhoto setValue:db_path forKey:@"pathInDropbox"]; 
      [parallelPhoto setValue:day_taken forKey:@"day"]; 
      [parallelPhoto setValue:month_taken forKey:@"month"]; 
      [parallelPhoto setValue:year_taken forKey:@"year"]; 
      NSLog(@"ADDED TO DB: %@ %@ %@", day_taken, month_taken, year_taken); 
     } 
    } 
NSError *error = nil; 
if(![context save:&error]){ 
    NSLog(@"error: %@", error); 
+0

Можете ли вы показать код в 'applicationDocumentsDirectory' –

+0

@ Paul.s это встроенный метод, который получает документы каталог –

+1

Там нет встроенного в методе с селектором –

ответ

0

Вы можете убедиться, что директория существует до добавления URL к постоянному магазину.

[[NSFileManager defaultManager] createDirectoryAtURL:[storeURL URLByDeletingLastPathComponent] 
         withIntermediateDirectories:YES 
              attributes:nil 
               error:NULL]; 

На самом деле, вы можете добавить этот код в ваш метод applicationDocumentsDirectory перед возвратом значения. Если вы это сделаете, убедитесь, что вы правильно справляетесь с потенциальной ошибкой.

EDIT

Поместите контрольную точку на линии

NSManagedObjectContext *context = [appDelegate managedObjectContext]; 

и шаг через это. Проверьте атрибуты MOC и PSC. Вы также должны проверить URL-адрес, хранящийся в постоянных хранилищах. Затем вы должны проверить файловую систему, чтобы узнать, что находится в этом каталоге.

Если ничего не работает, установите точку останова в точке, где MOC/PSC изначально создан и убедитесь, что он создан правильно. Изучите файловую систему, чтобы убедиться, что там есть магазин.

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

+0

nope это не сработало .. каталог создается вовремя и возвращает ДА, поэтому нет ошибки, вызванной –

+0

. Вам, вероятно, следует пройти через отладчик, а затем точно узнать, когда он сбой, и опубликовать эту информацию, потому что с тем, что вы опубликовали так далеко не так много в стороне от того, что файл/каталог не существует. –

0

Итак, я ве изменил несколько вещей в моей реализации, но то, что установил ее для меня, я думаю, следующая строка:

[newAddress.managedObjectContext сохранить: ноль]

вместо [контекст сохранения: & Ошибка]

который является управляемым объектомОбъект, который, кажется, был неправильным. Возможно, это был какой-то дубликат. Итак, я считаю, что хорошая стратегия всегда использовать управляемый объект ObjectContext, принадлежащий объекту, который вы только что внесли в него изменения, чтобы быть в безопасности.