【发布时间】:2016-01-30 06:48:43
【问题描述】:
当尝试在持久存储协调器中保存具有以下配置的托管对象时:
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]) {
我收到以下错误:
未解决的错误 Error Domain=NSCocoaErrorDomain Code=134030 “保存时出错。” UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/9FCED2FF-F976-4780-8192-208519C8CD11/Documents/ParallelPhotosModel.sqlite, NSAffectedStoresErrorKey=( “(网址:file:///var/mobile/Containers/Data/Application/9FCED2FF-F976-4780-8192-208519C8CD11/Documents/ParallelPhotosModel.sqlite)” ), NSUnderlyingError=0x127335c50 {Error Domain=NSCocoaErrorDomain Code=4 "该文件不存在。" UserInfo={NSUnderlyingError=0x12732a670 {错误域=NSPOSIXErrorDomain Code=2“没有这样的文件或目录” UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/9FCED2FF-F976-4780-8192-208519C8CD11/Documents/ParallelPhotosModel .sqlite}}}}},{ NSAffectedStoresErrorKey = ( “(网址: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 \"该文件\U2019t 不存在。\" 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}}}"; }
这里的根本问题是什么,我该如何避免?我在某处看到尝试保存在 App 包中时会弹出类似的错误,但我使用的 storeURL 来自教程(即文档目录)。
更新:
更具体地说,我粘贴了 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);
【问题讨论】:
-
你能把代码显示在
applicationDocumentsDirectory -
@Paul.s 这是获取文档目录的内置方法
-
该选择器没有内置方法
-
该代码 sn-p 没有保存更改。是导致问题的代码,还是代码中保存更改的其他地方的问题?
-
调用 - (void)saveContext 时输出错误。但正如您从错误中看到的那样,正如我所期望的那样,商店位置由我在上面包含的 sn-p 配置
标签: ios objective-c sqlite core-data nsmanagedobject