尝试在持久性存储协调器中使用以下配置保存托管对象时:
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代码= 134030“保存时发生错误。” 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“该文件不存在。” UserInfo = {NSUnderlyingError = 0x12732a670 {Error Domain = NSPOSIXErrorDomain代码= 2“没有这样的文件或目录” UserInfo = {NSFilePath = / var / mobile / Containers / Data / Application / 9FCED2FF-F976-4780-8192-208519C8CD11 / Documents / ParallelPhotosModel .sqlite}}}}},{NSAffectedStoresErrorKey =(“(URL:文件:
这里的根本问题是什么,我该如何避免呢?我曾在某处看到过尝试在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);
在将URL添加到持久性存储之前,您可能需要确保目录存在。
[[NSFileManager defaultManager] createDirectoryAtURL:[storeURL URLByDeletingLastPathComponent]
withIntermediateDirectories:YES
attributes:nil
error:NULL];
实际上,您可能需要将此代码添加到您的applicationDocumentsDirectory
方法中,然后再返回值。如果这样做,请确保您正确处理了潜在的错误。
编辑
在行上放置一个断点
NSManagedObjectContext *context = [appDelegate managedObjectContext];
并逐步解决。检查MOC和PSC的属性。您还应该检查持久性存储所拥有的URL。然后,您应该检查文件系统以查看该目录中的内容。
如果这些都不起作用,请在最初创建MOC / PSC的位置放置一个断点,并确保正确创建了该断点。检查文件系统以确保存储在那里。
然后,在文件和/或文件系统上安装观察程序,以便在文件和/或文件系统发生更改时得到通知,并查看是否可以捕获正在删除或移动的文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句