1

これが私がしたことです:アプリの入力されたバージョンでsqliteファイルを作成しました。そのファイルをアプリバンドルにコピーし、ターゲットが設定され、「バンドルリソースのコピー」に存在することを確認します

次に、次のようにCoreDataにデータを入力しようとします。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{  

if (_persistentStoreCoordinator != nil) {
    return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"TestModel.sqlite"];


if( ![[NSFileManager defaultManager]
      fileExistsAtPath:[storeURL path]] ) {
    // If there’s no Data Store present (which is the case when the app first launches), identify the sqlite file we added in the Bundle Resources, copy it into the Documents directory, and make it the Data Store.
    NSString *sqlitePath = [[NSBundle mainBundle]
                            pathForResource:@"TestModel" ofType:@"sqlite"
                            inDirectory:nil];
    NSError *anyError = nil;
    BOOL success = [[NSFileManager defaultManager]
                    copyItemAtPath:sqlitePath toPath:[storeURL path] error:&anyError];

    if(success){
        NSLog(@"sucess, loading into store");
        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();
        }else{
            NSLog(@"error with sqlite file");
        }
    }
}

return _persistentStoreCoordinator;

}

しかし、私はこのエラーを受け取ります:

NSFileManager copyItemAtPath:toPath:error:]: source path is nil

私は何が間違っているのですか?バンドル内にsqliteファイルが見つからないということですか?

4

2 に答える 2

1

ファイルを Finder から Xcode にインポートしたときに、「TestModel.sqlite」ではなく「TestModel」という名前が付けられたため、これが発生したと思います。

于 2012-09-07T00:00:33.707 に答える
0

ドキュメントから

bundlePath -- 最上位のバンドル ディレクトリのパス。これは有効なパスでなければなりません。たとえば、Mac アプリのバンドル ディレクトリを指定するには、パス /Applications/MyApp.app を指定します。

*編集: 私は間違った方法を持っていると思います :(, それでもこれを試してください!-> 使用しないのはなぜ- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extensionですか? ディレクトリをスキップします (いずれにせよ必要なかったので)。

于 2012-09-06T23:47:26.460 に答える