我有一个使用Core Data的iPhone应用程序.
我做了一个更新并使用轻量级迁移从我的MOM(管理对象模型)的V1到V2.这非常有效.
当我想要去我妈妈的V3(及以上)时会发生什么?
另一个问题是确定当前MOM版本的最佳方法是什么?我应该使用isConfiguration:compatibleWithStoreMetadata:
谢谢你的帮助.我很喜欢核心数据.但它有时让我头晕目眩,我感到困惑,这就是我寻求一些圣人智慧的原因.
出于性能原因,我想将索引属性设置为我的一些实体.我创建了一个新的核心数据模型版本来执行更改.核心数据检测到更改并将我的模型迁移到新版本,但是,没有生成索引.
如果我从头开始重新创建数据库,那么索引就在那里.我在iPhone和模拟器上检查了SQLite浏览器.只有先前格式的数据库已存在,才会出现此问题.
有没有办法手动添加索引?为此写一些sql?或者我错过了什么?我已经做了一些更重要的迁移,没有问题.但那些缺失的索引让我烦恼.
谢谢你的帮助!
我开始使用Core Data进行iPhone开发.我开始创建一个非常简单的实体(称为Evaluation),只有一个字符串属性(称为evaluationTopic).我有以下代码插入一个新的字符串:
- (void)insertNewObject {
// Create a new instance of the entity managed by the fetched results controller.
NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[fetchedResultsController fetchRequest] entity];
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
// If appropriate, configure the new managed object.
[newManagedObject setValue:@"My Repeating String" forKey:@"evaluationTopic"];
// Save the context.
NSError *error;
if (![context save:&error]) {
// Handle the error...
}
[self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
这完全正常,通过按下+按钮,新的"我的重复字符串"将被添加到表视图中并处于持久存储中.
然后我在XCode中按下了"设计 - >添加模型版本".我向现有实体添加了三个实体,并向现有"评估"实体添加了新属性.然后,我通过按"文件 - >新文件 - >托管对象类"创建了实体的新文件,并为我的四个实体创建了一个新的.h和.m文件,包括带有Evaluation.h和评估的"评估"实体.M.现在我通过设置"设计 - >数据模型 - >设置当前版本"来更改模型版本.完成所有这些后,我更改了insertMethod: …
我正在尝试迁移大约11Mb的iPhone/iPad sqlite商店.它有大约30个不同的实体,都非常相互关联.
在3GS上,需要相当长的时间.即使轻量级迁移也需要大约四分钟.
我想这是因为所有关系都保存在内存中.
阅读Apple迁移指南,它说对于大型数据集,一种方法是使用不同的映射模型进行多次传递.
一切都很好.但是,如果一个映射模型中的实体与另一个映射模型中的实体相关,则似乎无法执行此操作.实际上,编译错误是在Mapping Model xcmappingmodel文件中的"无法使用nil映射名称自动生成值表达式"的行中生成的.
任何提示非常感谢.
非常感谢,
马克斯
我有一个名为的对象uniqueLists,如下所示:
$scope.uniqueLists - {
name: [
'string1',
'string2',
'string3'
// Lots of strings
],
Category: [
'string1',
'string2',
'string3'
// Lots of strings
],
designer: [
'string1',
'string2',
'string3'
// Lots of strings
]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试从此列表中构建搜索功能.目前,我可以在页面上的复选框中显示所有列表项(下面的代码使用JadeNode/ExpressJS的模板引擎,即使你不熟悉它也很容易理解.Netnt ==子节点的它上面的线)
div(class="searchNav")
p(ng-repeat="param in searchParams") {{param[0] + ' = ' + param[1]}}
div.row-fluid(ng-repeat="(key,val) in uniqueLists")
form(ng-model="???") {{key}}
label.checkbox(ng-repeat="value in val")
input(type="checkbox", ng-model="?????")
{{value}}
Run Code Online (Sandbox Code Playgroud)
我遇到问题的唯一部分是ng-model我的表格和复选框.我想要form的ng-model == {{key}}.我已经尝试过设置但是它打破了Angular.我也试过了,ng-model='uniqueLists[index][0]'但是,Angular并没有解析它,只是让每个表单的模型成为字符串uniqueLists[index][0] …
我有一个使用核心数据的cocoa应用程序,它现在是其托管对象模型的第4版.
我的托管对象模型包含抽象实体,但到目前为止,我已设法通过创建适当的映射模型并使用addPersistentStoreWithType创建我的持久存储来实现迁移:配置:options:error并将NSMigratePersistentStoresAutomaticallyOption设置为YES.
NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
NSURL *url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"MyApp.xml"]];
NSError *error=nil;
[theCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:optionsDictionary error:&error]
Run Code Online (Sandbox Code Playgroud)
当我从模型版本3迁移到4时,这种方法很有效,这是一个涉及向多个实体添加属性的迁移.现在,当我尝试添加新的模型版本(版本5)时,对addPersistentStoreWithType的调用返回nil,错误仍为空.从4迁移到5涉及添加单个属性.
我正在努力调试问题,并检查了以下所有内容;
源数据库实际上是版本4,而persistentStoreCoordinator的托管对象模型是版本5.
4-> 5映射模型以及版本4和5的托管对象模型存在于我构建的应用程序的resources文件夹中.
我尝试了各种模型升级路径.奇怪的是,我发现从早期版本3 - > 5升级工作..但从4 - > 5升级失败.
我已经尝试添加自定义实体迁移策略,用于迁移属性正在发生变化的实体...在这种情况下,我覆盖了方法beginEntityMapping:manager:error :. 有趣的是,当迁移工作时(即当我从3迁移到4或从3迁移到5)时,会调用此方法,但在失败的情况下(4到5)不会调用它.
关于在哪里继续,我几乎不知所措.任何有助于调试此问题的想法都将非常感激.
我已经以一些简单的方式更新了现有iPhone应用程序的模型(删除属性,添加属性,删除索引),并且可以使用自动轻量级迁移来迁移持久性存储.
由于数据集的典型大小,处理时间并不是无关紧要的,并且需要为用户提供反馈.
NSMigrationManager提供了一个简单但有用的migrationProgress值,可在执行迁移时发送KVO通知.这构成了提供反馈的基础,但是尝试使用推断的模型([NSMappingModel inferredMappingModelForSourceModel:destinationModel:error:])导致完全相同的数据集的时序截然不同.
原始iPhone(2G)上的配置文件结果,磁盘上的缓存大小:1.785 MB.
自动推断轻量级迁移
PROFILE: CacheManager -migrateStore
PROFILE: 0.6130 (+0.6130) models loaded
PROFILE: 1.1759 (+0.5629) delegate -CacheManagerWillMigrate:
PROFILE: 1.2516 (+0.0757) persistent store coordinator loaded
PROFILE: 5.1436 (+3.8920) automatic lightweight migration completed
PROFILE: 5.5435 (+0.3999) delegate -CacheManagerDidFinishMigration:withError:
Run Code Online (Sandbox Code Playgroud)
手动推断迁移
PROFILE: CacheManager -migrateStore
PROFILE: 0.6660 (+0.6660) models loaded
PROFILE: 1.1471 (+0.4811) inferred mapping model generated
PROFILE: 1.4046 (+0.2574) delegate -CacheManagerWillMigrate:
PROFILE: 1.5058 (+0.1013) persistent store coordinator loaded
PROFILE: 22.6952 (+21.1894) manual migration completed
PROFILE: 23.1478 …Run Code Online (Sandbox Code Playgroud) 我按照这里找到的指南:http: //www.timisted.net/blog/archive/core-data-migration/ 但是当我使用新模型启动应用程序时,继续获取"无法找到迁移的映射模型" .我已经多次尝试过xcode 3和xcode 4,但是永远无法让它工作.
目前我的选项设置为:
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:NO], NSInferMappingModelAutomaticallyOption,
nil];
Run Code Online (Sandbox Code Playgroud)
我之前为推断选项设置了YES,但之后它只是在没有调用我需要迁移的自定义策略的情况下进行迁移,我认为这是因为它之前无法找到映射模型.
我的测绘模型没有被提起的任何原因?我通过检查它的SVN版本,仔细检查了以前的模型没有进行任何更改.
谢谢.
的背景
NSMigratePersistentStoresAutomaticallyOption
密钥传入字典来启用迁移
[NSNumber
numberWithBool:YES].modelByMergingModels: 问题
无论我做什么迁移,我都会收到错误消息:
"持久存储迁移失败,缺少源管理对象模型."
我试过的
我的智慧结束了.
我不禁想到我在某个地方犯了一个很大的错误,我没有看到.有任何想法吗?
我现在有大约4个不同版本的数据模型,除了最后一个版本之外的每个版本都只是使用自动轻量级迁移的一个小改动.对于这个最新的模型,我需要在迁移期间做一些额外的工作,所以我创建了一个自定义映射模型和一个迁移策略子类,其中包含createDestinations和createRelationships中的一些操作.问题是,我没有调用我的映射模型/自定义策略,而且似乎Core Data正在尝试执行轻量级迁移.我是否需要做些什么来保持轻量级迁移,但是当有可用的映射模型时使用我的映射模型?
mapping-model ×10
core-data ×9
iphone ×7
migration ×5
cocoa ×4
objective-c ×3
angularjs ×1
indexing ×1
ios ×1
javascript ×1
xcode ×1