我尝试使用完整版的apportable,但CoreData出现问题:

我在configuration.json中具有正确的功能:

"FEATURES": ["opengles2","landscape","prefer_external_storage","write_external_storage","write_settings"],



在要存储数据库的位置设置storageURL:

 #ifdef ANDROID
 //tried many different locations but not luck, I think there is the problem
 NSURL *storeURL = [NSURL URLWithString:@"/data/data/com.bluepiggames.zombieSlice/files/Documents/ZS_SuperDatabase.db"];
 #else
 NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ZS_SuperDatabase"];
 #endif

创建persistenceCoordinatore:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES],
                             NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES],
                             NSInferMappingModelAutomaticallyOption, nil];

_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]
                 initWithManagedObjectModel: [self managedObjectModel]];

最后,这些是应用程序崩溃的地方:

if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
//abort();


而且调试器中没有错误提示,只有这样的崩溃。

F/libc    (10177): Fatal signal 11 (SIGSEGV) at 0xe1a0d013 (code=1)
D/dalvikvm( 7227): GC_CONCURRENT freed 387K, 12% free 6566K/7431K, paused 2ms+2ms
D/IabHelper(10177): Querying SKU details.
I/DEBUG   ( 8708): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   ( 8708): Build fingerprint: 'SoftWinnner/crane_a1002jhenergy/crane-a1002jhenergy:4.0.4/IMM76D/20120822:eng/test-keys'
I/DEBUG   ( 8708): pid: 10177, tid: 10218  >>> com.bluepiggames.zombieSlice <<<
I/DEBUG   ( 8708): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr e1a0d013
I/DEBUG   ( 8708):  r0 63c40b68  r1 6412b13c  r2 6412b13c  r3 00000000



(编辑)要解决此崩溃,我们必须设置以下条件:

  NSError *error = nil. //!!!!!
  if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])


现在问题出在另一个地方:

// Returns the managed object model for the application.
// If the model doesn't already exist, it is created from the application's model.
- (NSManagedObjectModel *)managedObjectModel
{
    if (_managedObjectModel != nil) {
        return _managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"ZSDataModel" withExtension:@"momd"];
    NSLog(@"Test managedModel found %@",modelURL);

    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return _managedObjectModel;
}


该错误是因为未找到已编译的DataModel。有人知道如何将已编译的DataModel“ DataModel.momod”放入合适的项目中吗?

谢谢

最佳答案

抱歉,这么晚才答复,但我不想让这个问题无解。目前,momd文件不会自动添加为资产。不幸的是,每次更新xcdatamodeld时,都需要执行一个手动步骤。


导航到模拟器的“应用程序”目录(例如~/Library/Application\ Support/iPhone\ Simulator/6.1/Applications/<randomString>/<YourApp>.app/
导航到momd目录
在终端中运行以下命令:plutil -convert xml1 <ModelName>.mom -o <pathNearYourApprojFolder>/<ModelName>.mom
add_params词典中的configuration.json中,然后在assets数组中,添加使用plutil转换的文件的路径<pathRelativeToApprojFolder>/<ModelName>.mom

10-07 20:43