我正在实现一个基于导航的应用程序.用户将深入到感兴趣的节点.我正在使用Core Data,主要是因为我想尝试一下.如何最初加载数据库?我应该编写最初加载数据库的自定义代码,还是有一些工具可以帮我完成?
Ros*_*one 17
这是使用plist预加载Core Data存储的简单方法.
创建包含字典数组的属性列表.使每个字典的键对应于托管对象的键.
alt text http://www.freeimagehosting.net/uploads/b0b1909e81.png
然后,在应用程序第一次启动时调用此方法:
- (void)loadDataFromPropertyList {
NSString *path = [[NSBundle mainBundle] pathForResource:@"someFile" ofType:@"plist"];
NSArray *items = [NSArray arrayWithContentsOfFile:path];
NSManagedObjectContext *ctx = self.managedObjectContext;
for (NSDictionary *dict in items) {
NSManagedObject *m = [NSEntityDescription insertNewObjectForEntityForName:@"TheNameOfYourEntity" inManagedObjectContext:ctx];
[m setValuesForKeysWithDictionary:dict];
}
NSError *err = nil;
[ctx save:&err];
if (err != nil) {
NSLog(@"error saving managed object context: %@", err);
}
}
Run Code Online (Sandbox Code Playgroud)
loadDataFromPropertyList
通过在以下实施中包含以下代码,第一次启动应用程序时调用application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"firstRun"])
{
[defaults setObject:[NSDate date] forKey:@"firstRun"];
[[NSUserDefaults standardUserDefaults] synchronize];
[self loadDataFromPropertyList];
}
Run Code Online (Sandbox Code Playgroud)
没有自动(即内置)方法将数据导入核心数据上下文。
我怀疑这是因为 Core Data 实际上是一个对象图管理框架(恰好能够将该对象图持久保存到磁盘),并且数据和对象实例之间的映射取决于模式(因此至少需要一些代码)。
如果您已经拥有其他格式的数据,则应阅读 Core Data 编程指南中有关将数据导入 Core Data 上下文的部分。如果您还没有其他格式的数据,则必须以任一方式编写代码(生成中间格式或直接填充上下文)。
最后,尽管 Core Data XML 格式并不是真正的公共 API,但它很容易手动使用或使用任意数量的基于 XML 的工具。根据数据的复杂性,您也许能够对 XML 架构进行足够的逆向工程,以生成 XML 支持的持久存储。然后,您可以将此存储迁移到 SQLite 持久存储,然后就可以了。
归档时间: |
|
查看次数: |
5826 次 |
最近记录: |