Tag: 核心数据迁移

具有PersistentStore的iOS应用程序coreData作为静态sqlite数据迁移?

该应用程序正在使用捆绑目录中的静态sqlite(初始数据)作为Coredata的持久性存储。 sqlite有7个表,其中一个表是通过添加额外的列/字段来修改的。 我如何让coreData了解持久性存储(store)已更改,并且需要进行新的更新? 有没有像我们为coredata做任何模型版本的概念?

修改核心数据模型每次都需要新版本?

我一直在四处搜寻,让我明白,每当我改变我的实体的属性,我需要创build一个全新的模型的新版本? 我明白,SQLite数据库现在与我的数据模型不同步,但我不能只是删除SQL文件,并重新运行我的模拟器? 这是我一直在做的,但似乎并没有工作。

iOS – 用MagicalRecordpipe理两个CoreData模型

我正在使用MagicalRecord来处理CoreData模型,这个模型很可能会在未来版本化。 现在我需要向我的应用程序添加一个预先填充的数据库,其中包含大约80000个对象的实体; 这个数据是静态的,我不希望它会改变。 如果我将这个实体添加到现有模型中,每次模型更改时都需要生成一个新的种子数据库,这增加了项目的复杂性。 更好的解决scheme是创build第二个模型,只为新的实体:种子数据库将永远不会改变,第一个模型可以照顾它的版本,无论新的模型。 这两个模型之间不需要任何关系。 在现有的模型之上,我也使用了RestKit,下面是一切设置: [MagicalRecord setupAutoMigratingCoreDataStack]; RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithPersistentStoreCoordinator: [NSPersistentStoreCoordinator MR_newPersistentStoreCoordinator]]; self.objectManager.managedObjectStore = managedObjectStore; [managedObjectStore createManagedObjectContexts]; // bind RK with MagicalRecord [NSManagedObjectContext MR_setRootSavingContext: managedObjectStore.persistentStoreManagedObjectContext]; [NSManagedObjectContext MR_setDefaultContext: managedObjectStore.mainQueueManagedObjectContext]; managedObjectStore.managedObjectCache = [[RKFetchRequestManagedObjectCache alloc] init]; 新模型将不会与RestKit一起使用。 MagicalRecord可行吗? 我已经通过它的文档,但可以find有用的东西。 非常感谢,DAN UPDATE 让我们用一个xcode编辑器创build一个带有4个实体(Foo,Bar,Blarg,Baz)的db模型。 模型编辑器有一个不能删除的默认configuration,所以我们只能添加两个新configuration(SeedConfiguration和UserConfiguration),将Foo添加到第一个,另外三个添加到第二个。 这两个configuration应保存在seed.sqlite和user.sqlite中。 在这一点上,我想运行一个脚本,它填充了数千个Foo对象的seed.sqlite:一旦生成这个文件将被放入项目资源并在启动时复制到应用程序目录中; user.sqlite将在运行时生成,并用于pipe理用户信息。 当我以“脚本”模式启动应用程序来填充seed.sqlite时,两个sqlite文件都正确创build,但它们都包含所有的实体,而我期望在seed.sqlite和Bar,Blarg,Baz中findFoo user.sqlite。 我是否应该插入Foo对象并复制生成的seed.sqlite,即使它包含所有其他(空)实体? 以下是如何创build一个协调器中的两个持久性存储: https : //stackoverflow.com/a/24022978/2515181 […]

应用程序在创buildCoredata的managedObjectModel时崩溃

我从下面的代码创build一个managedObjectModel对象 – (NSManagedObjectModel *)managedObjectModel { if (managedObjectModel_ != nil) { return managedObjectModel_; } NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"DataHouse" ofType:@"momd"]; NSURL *modelURL = [NSURL fileURLWithPath:modelPath]; managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; return managedObjectModel_; } 我在我的xcode项目中有DataHouse.xcdatamodeld文件。 这段代码工作得很好。 现在,来解决这个问题….通过遵循这个美妙的链接,我已经从我的代码中删除了一些错误 。 我已经将我的框架包含在一个新的项目中,并尝试运行它。 该应用程序正好在上面的代码库中崩溃。 我也知道它的原因,但无法解决它。 这里的问题是,在创buildmanagedObjectModel时,编译器正在主包中查找名为DataHouse.xcdatamodeld的文件。 但这个文件是新框架的一部分,并不在主包中。 现在,我该如何解决这个问题..任何想法请…

更新应用程序以使用先前双SQLite持久性存储的Core Data

我目前正在升级使用两个SQLite dbs的旧版iPhone闪存卡应用程序(其中一个只能通过应用程序更新,删除卡,添加卡,卡更新以及另一个用户添加它们的只读问题自己的自定义卡),而不是使用核心数据。 用于区分只读卡和用户添加卡的“Flashcard”对象的唯一属性是“isCustom”属性。 以下是我认为有必要这样做的步骤: (首先从2个SQLite数据库更新到CoreData) 从用户自定义卡数据库获取所有自定义卡条目。 使用只读卡添加新的Core Data对象模型,然后将用户添加的自定义卡加载到此模型中。 删除旧的SQLite数据库(自定义卡数据库和只读卡数据库)。 (将来会有一个核心数据模型的更新) 从当前核心数据持久性存储中获取所有定制卡片。 将所有自定义卡迁移到新的Core Data持久性存储。 我只想确定在开始从头开始devise这个系统之前,这是否是一条路。 任何提示将不胜感激。

NSManagedObject的描述显示值,但访问它们显示NaN?

我在这里发现了一个在迁移模型时创build关系的优秀解决scheme 。 我在模型中遇到了一个奇怪的问题。 -(BOOL)createRelationshipsForDestinationInstance:(NSManagedObject *)dInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError *__autoreleasing *)error { NSError *superError = nil; BOOL ismappingSuccess = [super createRelationshipsForDestinationInstance:dInstance entityMapping:mapping manager:manager error:&superError]; if (ismappingSuccess && [dInstance.entity.name isEqualToString:@"FTEvent"]){ FTEvent *event = (FTEvent*)dInstance; NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:event.date_time]; … 这里有一个奇怪的问题event.date_time我期待一个值,但在debugging器它显示的值(NsTimeInterval) NaN而不是实际值。 但是,当我打印事件的描述,我可以清楚地看到提供的date值。 当我做event.date_time时,这怎么可能显示NaN ? Printing description of event: <NSManagedObject: 0xbbb9b80> (entity: FTEvent; id: 0xbbbab90 […]

iCloud:在IOS和OSX之间同步核心数据

我尝试在IOS和OSX之间同步核心数据。 在这两个应用程序我有相同的configuration: 和相同的权利: 我也使用相同的代码为商店协调员同名的sqlite文件和url: NSManagedObjectModel* managedModel = [NSManagedObjectModel mergedModelFromBundles:nil]; NSPersistentStoreCoordinator* storeCooordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedModel]; //-> start iCloud dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSURL* applicationFilesDirectory = [JHDCoreDataDAO applicationFilesDirectory]; NSURL* storeURL = [applicationFilesDirectory URLByAppendingPathComponent:DATABASE_NAME]; if(!storeURL) { NSLog(@"Error reading applicationFilesDirectory for given sqlite resouce"); } NSString* containerIdentifier = [NSString stringWithFormat:@"%@.%@",TEAM_IDENTIFIER,APP_IDENTIFIER]; NSURL* iCloud = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:containerIdentifier]; NSString *iCloudEnabledAppID = […]

无法创build具有nil模型错误的NSPersistentStoreCoordinator

我有一个完美运行的coreData datamodel文件。 由于一些特殊的要求,我删除了旧的datamodel文件,并创build了完全相同的实体的另一个datamodel文件。 以前的dataModel 实体没有变化 。 我已经把它作为一个不同的包的一部分,并从该包中引用它。 创buildmanagedObjectModel的代码 if (managedObjectModel_ != nil) { return managedObjectModel_; } NSBundle *newBundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"dataBundle" withExtension:@"bundle"]]; NSString *modelPath = [newBundle pathForResource:@"DataHouse" ofType:@"momd"]; NSURL *modelURL = [NSURL fileURLWithPath:modelPath]; managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; return managedObjectModel_; 该应用程序运行良好,直到一段时间,突然(随机)我得到一个错误说 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot create an […]

我的xcmappingmodel中的自定义策略将不会被执行

我试图为我的应用程序创build一个具有一些自定义代码的映射模型。 因此,我创build了一个xcmappingmodel,并将NSEntityMigrationPolicy分类并实现了 createDestinationInstancesForSourceInstance 方法。 此外,我在我的映射模型的“自定义策略”字段中input了类名。 不幸的是,我的代码将永远不会被调用(尝试断点和日志)。 我的商店是使用以下选项创build的: NSMigratePersistentStoresAutomaticallyOption: YES NSInferMappingModelAutomaticallyOption: YES 我正在使用XCode 4.0.2(也用XCode 4.2进行testing)。 所有其他的“轻量级”迁移运行平稳。 我需要做什么才能使我的自定义迁移运行?

核心数据轻量级迁移在应用程序更新后崩溃

两天前我发布了应用程序。 根据AppStore的反馈和itunesconnect发布的崩溃报告,发布中有很多崩溃。 但是,不是100%的用户受到了影响,也许只有30%。 我读过崩溃日志,看到一个问题。 它正在数据库迁移过程中崩溃。 我使用轻量级数据库迁移。 通常我会非常仔细地添加新的datamodel版本。 即使在每个发行版之前,我都安装了以前版本的应用程序,使用它一段时间,然后才安装最新版本。 那么这次呢。 我浏览了两个数据模型(之前和现在)。 添加: 1)新实体(轻量级迁移是可以的) 2)现有实体内的新字段。 他们都是可选的。 (确定轻量级迁移) 3)我做了可选的AND索引的现有实体中的一个新领域。 (好?) 没有现有的字段和实体被重命名。 我做错了什么? 堆栈跟踪: Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0: 0 libsystem_kernel.dylib 0x352f439c pread + 20 1 libsqlite3.dylib 0x30d2d632 unixRead 2 libsqlite3.dylib 0x30d4221a readDbPage 3 libsqlite3.dylib 0x30d41156 sqlite3PagerAcquire 4 libsqlite3.dylib 0x30d583be moveToChild 5 libsqlite3.dylib 0x30d8e0e8 moveToLeftmost 6 […]