CoreData“验证商店网址时出错”
Posted
技术标签:
【中文标题】CoreData“验证商店网址时出错”【英文标题】:CoreData "Error validating url for store" 【发布时间】:2010-09-30 16:54:57 【问题描述】:我的应用程序出现问题,CoreData 在模拟器中正常工作,但在设备上却没有。
我收到一个
2010-09-30 12:45:07.500 CoreDataTutorial_ios[130:307] Unresolved error Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn’t be completed. (Cocoa error 513.)" UserInfo=0x1412a0 NSUnderlyingException=Error validating url for store,
NSUnderlyingException = "Error validating url for store";
我在这个函数中调用 PersistentStoreCoordinator(抛出上面的错误):
-(NSPersistentStoreCoordinator*)persistentStoreCoordinator
if(persistentStoreCoordinator_ != nil)
return persistentStoreCoordinator_;
NSURL *aStoreURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingFormat:@"corebase.sqlite"]];
NSError *anError = nil;
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if(![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:aStoreURL options:nil error:&anError])
NSLog(@"Unresolved error %@, %@", anError, [anError userInfo]);
abort();
return persistentStoreCoordinator;
我在“objc_exception_throw”上设置了一个断点,以查看 aStoreURL 是什么,它是: 文件://localhost/var/mobile/Applications/BE9A2982-BDC3-405D-A201-FB78E9E0790B/Documentscorebase.sqlite
我注意到它本身并不是在“/Documents”之后添加最后的“/”。 当我以这种方式创建 URL 时
NSURL *aStoreURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingFormat:@"/corebase.sqlite"]];
它似乎奏效了,或者至少通过了那部分。 这个函数不应该附加那个部分吗?
-(NSString*) applicationDocumentsDirectory
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
在模拟器中运行良好,正确的做法是什么?
【问题讨论】:
【参考方案1】:NSURL *aStoreURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
stringByAppendingFormat: @"corebase.sqlite"]];
应该是
NSURL *aStoreURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
stringByAppendingPathComponent: @"corebase.sqlite"]];
stringByAppending*PathComponent* 而不是 stringByAppending*Format*。 这个不错的小错误是由自动完成带给你的 :-)
为什么它在模拟器中工作?我猜是因为您可以在硬盘上的任何地方创建文件。因此模拟器在您的应用程序目录中创建了 Documentscorebase.sqlite。你应该检查它是否在那里。
在 iphone 上,您仅限于 Documents 目录,并且不允许在任何地方创建文件。
【讨论】:
以上是关于CoreData“验证商店网址时出错”的主要内容,如果未能解决你的问题,请参考以下文章
数据导入CoreData期间如何显示progressBar?
在 Swift 中将 CoreData 保存/同步到 iCloud