0

我在堆栈上找到了很多解释和帮助,但到目前为止,还没有运气。

几乎,我的 myapp.sqlite(我预先填充的)在模拟器上运行良好,但是当我在 iPad 上运行它时,它是空的。

所以在尝试了不同的事情之后,这是我得到的最接近的:

  • 我将 sqlite db 复制到 Bundle 中,但我将其移动到 Library 文件夹中。

在我的 AppDelegate 上,我这样做:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    NSLog(@"Starting to save the DB to another location");

    NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
    NSString *targetPath = [libraryPath stringByAppendingPathComponent:@"myDB.sqlite"];

    if (![[NSFileManager defaultManager] fileExistsAtPath:targetPath]) {
        // database doesn't exist in your library path... copy it from the bundle
        NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"myDB" ofType:@"sqlite"];
        NSError *error = nil;

        if (![[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:targetPath error:&error]) {
            NSLog(@"Error: %@", error);
        }
    }


    return YES;
}

然后在 PersistentStoreCoordinator 上,我这样做

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
    NSString *targetPath = [libraryPath stringByAppendingPathComponent:@"myDB.sqlite"];

//    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"naccApp.sqlite"];
//    NSURL *storeURLLocal = [[NSBundle mainBundle] URLForResource:@"myDB" withExtension:@"sqlite"];

    NSURL *storeURL = [NSURL URLWithString:targetPath];

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

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    return _persistentStoreCoordinator;
}

当我尝试使用数据库 (fetchRequest) 时,出现错误:

CoreData SQL 存储仅支持文件 URL(获取 /var/mobile/Applications/2EB2AADD-DF9D-475F-A05E-BB138502471F/Library/myDB.sqlite)。

信息很清楚,但我在这里尝试了几乎所有的帮助,但仍然没有。

不用说,我是 Core Data 的新手,所以请原谅我的无知。

哦,我正在使用 xCode 5。

谢谢

4

1 回答 1

4
NSURL *storeURL = [NSURL URLWithString:targetPath];

应该:

NSURL *storeURL = [NSURL fileURLWithPath:targetPath];

以便您生成文件 URL 而不是 Web URL。

于 2013-10-08T23:05:22.857 回答