【问题标题】:Unable to add persistent store无法添加持久存储
【发布时间】:2019-12-27 04:37:04
【问题描述】:

我正在尝试在Library/Application-Support 文件夹中添加一个 sqlite 持久存储,如下所示:

- (NSManagedObjectModel *)managedObjectModel
{
    if (!_managedObjectModel)
    {
        NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"delete" withExtension:@"momd"];
        _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    }
    return _managedObjectModel;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (!_persistentStoreCoordinator)
    {
        @synchronized(self)
        {
            if (!_persistentStoreCoordinator)
            {
                NSError *error = nil;
                NSURL *storeURL = [[[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] lastObject] @"delete.sqlite"];
                NSPersistentStoreCoordinator *persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
                NSPersistentStore * persistentStore = [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];            
                _persistentStoreCoordinator = persistentStoreCoordinator;
            }
        }
    }
    return _persistentStoreCoordinator;
}

这会失败并出现以下错误:

CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) 
URL:file:///Users/harshithg/Library/Developer/CoreSimulator/Devices/D9A32558-558A-4E0E-915D-FEF25C772669/data/Containers/Data/Application/9517BBBB-E383-467E-B0E2-8960B734B239/Library/Application%20Support/delete.sqlite 
options:(null) ... 
returned error NSCocoaErrorDomain(512) with userInfo dictionary { reason = "Failed to create file; code = 2";

我使用的是 iOS 13.3 和 Xcode 11.3。有谁知道这里发生了什么?

【问题讨论】:

  • url路径有问题。检查路径
  • NSURL *documentDirectoryURL = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSURL *persistentStoreURL = [documentDirectoryURL URLByAppendingPathComponent:@"delete.sqlite"];
  • @Help 我想在 Library/Application-Support 文件夹中添加我的持久存储,而不是在 Documents 文件夹中。我有 UIFileSharingEnabled=YES,它公开了我的 Documents 目录。但是,我可以使用 NSURLIsHiddenKey 隐藏 .sqlite 文件,但我不想这样做。
  • 请注意,将 sqlite 文件存储在 Library 文件夹中不会引发任何错误。库/应用程序支持似乎引起了一些问题。
  • 应用程序支持文件夹不存在,除非您明确创建它。你的代码在哪里?

标签: ios objective-c iphone nsmanagedobjectcontext nspersistentstore


【解决方案1】:

Application Support 文件夹不存在,除非您明确创建它。您的任何代码都没有创建它。有一个 NSFileManager 方法会为您提供 NSApplicationSupportDirectory URL同时创建它(如果它不存在)。

https://developer.apple.com/documentation/foundation/nsfilemanager/1407693-urlfordirectory?language=objc

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2011-02-28
    • 2012-06-03
    • 1970-01-01
    相关资源
    最近更新 更多