标签: core-data-migration

iOS核心数据迁移超时

我在Xcode组织器中收到此错误消息(以及随后的崩溃),我怀疑它与核心数据迁移有关,需要很长时间才能完成:

10月4日09:51:14未知SpringBoard [30]:appName未能及时发布

即使我插入人为延迟(例如,使用sleep(100)),此迁移也可在模拟器中找到.

只有当我尝试在iPhone 4或iPod第4代上进行测试时才会收到此超时错误消息.

如果不需要迁移,则通过在构建期间提供正确的sqlite3数据库版本,不会发生崩溃.

以下是代码中发生的事情:

在应用程序委托中:

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

    PropertiesTableViewController *propertiesTableViewController = 
            [[PropertiesTableViewController alloc] initWithManagedObjectContext:self.managedObjectContext];

    UINavigationController *newNavController = 
                        [[UINavigationController alloc] 
                         initWithRootViewController:propertiesTableViewController];


    [propertiesTableViewController release];
    [window addSubview:newNavController.view];


    NSLog(@"UUID: %@", [[UIDevice currentDevice] uniqueIdentifier]);

    [window makeKeyAndVisible];

    return YES;
}


- (NSManagedObjectContext *) managedObjectContext {

    if (managedObjectContext != nil) {
        return managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }
    return managedObjectContext;
}`
Run Code Online (Sandbox Code Playgroud)

persistentStoreCoordinator是一个相当长的方法,很高兴在需要时提供它.它迁移两个数据库,每个数据库大约500kBytes.第一个总是成功,但第二个总是失败(在设备上),但两者总是在模拟器中成功.propertiesTableViewController提供了一个表视图,其中包含从迁移的数据库中获取的数据,因此必须在propertiesTableViewController查看之前进行迁移.

我还尝试使用以下方法尝试从propertiesTableViewController内部(在viewDidLoad方法中)触发迁移:

  • [NSThread detachNewThreadSelector:@selector(getMOC)toTarget:self …

core-data core-data-migration ios

3
推荐指数
1
解决办法
1221
查看次数

核心数据更改属性从Integer 16到Integer 32

我有一个非常严重的问题.该应用程序是实时的,但不幸的是它在iOS 5上失败了,我需要发布更新.

事情是少数实体的ID列在Integer 16中,但我需要更改为Integer 32.

这显然是我的错,这个模型是很久以前创建的,它只是被重用了.令我惊讶的是(现在)在iOS 4上,核心数据中的整数16可以很容易地保持数字大到500 000(错误?),但它现在不能正常工作 - 它给了我无效的数字.

应用程序是实时的,它是成功的,Core Data也用于保持用户的分数,成就等,我不想删除,迫使他们重新安装应用程序.简单地将不同实体中的十个属性从Integer 16更改为Integer 32的最佳方法是什么?

当然,我知道这些属性的名称和实体.

如果我只是更改xcdatamodeld文件中这些属性的Type列,那么对于新用户,它将起作用,但现有用户的文档文件夹中已经有sqlite文件.我相信我需要以某种方式更改持久性商店协调员.

而且你对性能有什么看法,有大约10个属性将新闻从16改为32,但Core Data在通常情况下有超过10万个对象.

问候

xcode core-data core-data-migration

3
推荐指数
2
解决办法
6896
查看次数

如何通过删除App Update上的旧数据来迁移核心数据

嗨我要在appstore中更新我的iOS应用程序,此更新包含数据库更改,现在如何通过删除应用程序更新中现有版本的旧数据库迁移现有核心数据?我已经提到了核心数据迁移教程

核心数据迁移帖子

不幸的是没有用.任何帮助都提前感谢

iphone core-data objective-c core-data-migration ios

3
推荐指数
1
解决办法
3918
查看次数

我是否可以更改核心数据关系的删除规则并仍然执行轻量级迁移?

我有两个与同一API通信的应用程序.随着他们的成长,他们每个人都接受了更多API的功能,而我现在处于他们完全相同的阶段,除了启动控制器的安排.

到目前为止,他们的核心数据模型是分开维护的,只包含他们需要的那些实体; 但我现在想为每一个使用相同的数据模型版本.但是,它们的最新版本在某些小方面确实存在差异,特别是在某些关系的删除规则中.

如果我改变从删除规则Nullify,以Cascade或版本之间反之,将我仍然能够执行一个轻量级的迁移?在Apple的网页中没有提到它,虽然它确实列出了兼容的类似步骤(例如,一个< - >到多个)

core-data objective-c core-data-migration ios

3
推荐指数
1
解决办法
251
查看次数

升级到App Store后,iPhone应用程序的核心数据?

几天前,我设法将我的第一个iPhone应用程序上传到Apple的App Store.我的应用程序基于核心数据,因此它包含用户数据到他们的设备.

我想知道的是,无论是否更改Core Data,升级应用程序时会发生什么?(改变意味着增加新的实体或财产等)

根据我的经验,我从Apple的App Store下载了我自己的应用程序并保存了一些数据然后我使用XCode从我的计算机安装了相同的应用程序,只是略微改变了与Core Data无关的界面.当我打开应用程序时,数据就在那里.

它是安全的,只要我们不碰核心数据,用户数据不会影响iPhone的应用程序的升级版上传到苹果App Store假设?

iphone upgrade core-data app-store core-data-migration

2
推荐指数
1
解决办法
1556
查看次数

如何恢复丢失的CoreData Model版本?

所以,我搞砸了.我在Xcode中创建了一个现有CoreData模型的新版本,并且以某种方式从未最终提交.xcdatamodel文件(或更准确地说,contents文件在其中).现在,不久之后,该文件已经丢失,我无法恢复它.试图在xcode中打开xcdatamodel文件给我错误"文件"内容"因为没有这样的文件而无法打开".

我以为我可以聪明并contents从以前的版本.xcdatamodel文件中复制文件,然后只需添加我为此迁移添加的表(幸运的是我只添加了一个表并生成了一个类,因此再次创建表很容易).问题是,当我在模拟器或已存在数据的设备上运行应用程序时,我收到以下错误:Error Domain=NSCocoaErrorDomain Code=134130 "The operation couldn’t be completed. (Cocoa error 134130.)"

该错误还列出了NSPersistentStoreCoordinator的当前模型哈希,因此现在我假设所讨论的模型的哈希很可能是不同的.

我有什么选择?如何修复数据,以便用户在更新之前不必卸载应用程序并丢失所有数据?

以下是错误的完整内容:

2015-01-21 11:01:11.050 Marq[2699:607] CoreData: annotation: Incompatible version schema for persistent store 'file:///Users/aerion/Library/Developer/CoreSimulator/Devices/71815540-57DE-49BF-A6F6-69500A54281F/data/Applications/EE5B15A6-A5ED-46EB-9DFD-B6B54353E35B/Documents/ARUPInspect_Schema.sqlite'.  store metadata = {
    NSPersistenceFrameworkVersion = 479;
    NSStoreModelVersionHashes =     {
        Asset = <4b2b421f 4295c02f 89b5a2e8 1c4fc3e9 2b515eca 95e89ad6 e65c891d f82b1090>;
        BooleanValue = <3e1758f6 0f04f670 5c150cd4 55f0a0eb b5c1a17e 8b1abdcc ab7044ba fd02dd5e>;
        Client = <c52499f9 a0f482f7 9bdcb115 8217e157 1861f63a e926b55c e7cc85bb b4044464>;
        DataValue = <43afe89a 90c53a31 …
Run Code Online (Sandbox Code Playgroud)

core-data core-data-migration ios

2
推荐指数
1
解决办法
1678
查看次数

核心数据模型版本控制,没有 xcdatamodeld 文件

在我的项目中,我没有 xcdatamodeld 文件,而是只有 Model.xcdatamodel 文件。我不知道它是如何发生的,现在该应用程序已经运送到商店。那么,有没有办法添加模型版本控制。请帮忙。

core-data objective-c core-data-migration ios

2
推荐指数
1
解决办法
1586
查看次数

持久存储在大量迁移中找不到迁移策略类

我收到此错误:

2015-12-29 03:13:41.603 n-back project[21345:474175] CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///Users/Nathan/Library/Developer/CoreSimulator/Devices/EC2C60E2-9FC8-40D7-B16F-15960AA6B42A/data/Containers/Data/Application/8F8132B0-76E9-491E-BA1B-27A5D78CE7D0/Documents/data.sqlite options:{
    NSMigratePersistentStoresAutomaticallyOption = 1;
} ... returned error Error Domain=NSCocoaErrorDomain Code=134110 "(null)" UserInfo={NSUnderlyingException=Couldn't create mapping policy for class named (BTRPolicy)} with userInfo dictionary {
    NSUnderlyingException = "Couldn't create mapping policy for class named (BTRPolicy)";
}
2015-12-29 03:13:41.608 n-back project[21345:474175] Unresolved error Error Domain=YOUR_ERROR_DOMAIN Code=9999 "Failed to initialize the application's saved data" UserInfo={NSLocalizedDescription=Failed to initialize the application's saved data, NSUnderlyingError=0x7b14eef0 {Error Domain=NSCocoaErrorDomain Code=134110 "(null)" UserInfo={NSUnderlyingException=Couldn't create mapping policy for class named …
Run Code Online (Sandbox Code Playgroud)

macos cocoa core-data core-data-migration ios

2
推荐指数
1
解决办法
459
查看次数

此NSPersistentStoreCoordinator没有持久性存储(架构不匹配或迁移失败).它无法执行保存操作

我正在使用xxxcdatamodel的应用程序.现在在同一个xxxcdatamodel中,我在其中一个实体中添加了一个属性.应用程序崩溃,显示消息"此NSPersistentStoreCoordinator没有持久存储(模式不匹配或迁移失败).它无法执行保存操作." 我尝试了很多东西,我也使用轻量级迁移来处理这种情况,但这样做不太好.我的代码是:

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

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"myApp.sqlite"];

    NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    NSDictionary *options = @{
                              NSMigratePersistentStoresAutomaticallyOption : @YES,
                              NSInferMappingModelAutomaticallyOption : @YES,
                              NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}
                              };

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

    return __persistentStoreCoordinator;
}




- (BOOL) saveContext
{
    @synchronized (_localStorage) {
        //NSLog(@"----------------------------Save context called---------------------------");
        BOOL result = TRUE;
        NSError *error …
Run Code Online (Sandbox Code Playgroud)

xcode core-data core-data-migration xcdatamodel

2
推荐指数
1
解决办法
5871
查看次数

向核心数据实体添加瞬态属性是否需要新版本模型?

我有一个现有实体的现有数据模型。我想在不更改核心数据模型版本的情况下向实体添加新属性。这可以通过瞬态属性完成,因为瞬态属性实际上从未保存到数据库表中吗?

找不到关于此的任何文档。

core-data iphonecoredatarecipes core-data-migration

2
推荐指数
1
解决办法
77
查看次数