iphone - coredata 应用程序目录

Posted

技术标签:

【中文标题】iphone - coredata 应用程序目录【英文标题】:iphone - coredata application directory 【发布时间】:2011-01-14 21:05:17 【问题描述】:

我将这个 Xcode 模板用于核心数据。

在委托上,我有这个方法:

- (NSURL *)applicationDocumentsDirectory 
  return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

但这需要 ios4。

我正在尝试使该应用与 3.0 兼容。

所以,我已将此方法转换为:

- (NSURL *)applicationDocumentsDirectory 

  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  return [NSURL URLWithString:documentsDirectory];


但是当 coredata 尝试使用商店 URL 时

  NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyFile.sqlite"];
  if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) 

它在 IF 行崩溃并显示以下消息:

CoreData SQL 存储仅支持文件 URL(获取 /var/mobile/Applications/BB312A7E-6AE1-4BA2-AD87-6B96D8855CC6/Documents/MyFile.sqlite)。'

但 StoreURL 是一个 NSURL!

有什么线索吗?谢谢

【问题讨论】:

【参考方案1】:

尝试做:

NSString *pathToYourSqliteFile = @"/your/path/here";
NSURL *storeURL = [NSURL fileURLWithPath: isDirectory:NO];

看看这能不能解决问题。

【讨论】:

我的应用程序部署目标是 8.0,这对它有用!谢谢!【参考方案2】:

见CoreData application directory crashes on iOS3

Surfdev 的建议在 3.1.2 上运行良好

【讨论】:

【参考方案3】:

斯威夫特 3

 let documentsUrl = FileManager.default.urls(for: .documentDirectory, in:.userDomainMask).first!

【讨论】:

以上是关于iphone - coredata 应用程序目录的主要内容,如果未能解决你的问题,请参考以下文章

如何获取应用程序文档目录 iPhone 的 URL

使用 GameKit 通过 NSDictionary 在 iPhone 之间传输 CoreData 数据

为 iPhone/CoreData 中未解决的错误替换 aborts()

Coredata iPhone 到带有 iCloud 的 iPad/Mac?

iPhone - 在删除 CoreData 中的对象后尝试保存新对象时应用程序崩溃

iPhone CoreData 应用程序首次启动崩溃