核心数据持久存储无法创建文件

时间:2014-10-25 22:01:33

标签: ios core-data nspersistentstore ios8.1

我在使用CoreData的iOS 8.1上遇到了问题。在我的设备上,当代码在每个模拟器上正常运行时,我总是会收到此错误:

Error Domain=NSCocoaErrorDomain Code=512 "The operation couldn’t be completed. (Cocoa error 512.)" UserInfo=0x15e62bd0 {reason=Failed to create file; code = 1} with userInfo dictionary {
reason = "Failed to create file; code = 1";
}

我已经尝试从我的设备中删除该应用。我成功尝试手动创建文本文件。以下是导致错误的代码段:

- (NSPersistentStoreCoordinator*) persistentStoreCoordinator {
  NSError* error = nil;
  NSURL* storeURL = [[[NSBundle mainBundle] resourceURL] URLByAppendingPathComponent: @"users.sqlite"];

  if (_persistentStoreCoordinator != nil)
    return _persistentStoreCoordinator;

  _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
  if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
    error = nil;
    [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
    [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];
  }

  return _persistentStoreCoordinator;
}

编辑:

感谢您的回答jrturton。 解决方案是

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSURL* storeURL = [NSURL fileURLWithPath:[documentsDirectory stringByAppendingString:@"/users.sqlite"] isDirectory:NO];

1 个答案:

答案 0 :(得分:1)

您的应用套装在设备上是只读的,但在模拟器上却没有。

当您创建storeURL时,您正在创建指向应用程序包的URL。您应该使用文档目录。