首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIManagedDocument和核心数据

UIManagedDocument和核心数据
EN

Stack Overflow用户
提问于 2013-02-05 19:02:13
回答 2查看 733关注 0票数 5

我找到了这些斯坦福大学的教程https://itunes.apple.com/us/course/ipad-iphone-app-development/id495052415,并且一直在听一个关于核心数据的讲座,这真的很棒。

它展示了如何通过UIManagedDocument访问核心数据...我唯一不明白的是,UIManagedDocument怎么知道它应该使用哪种模型,因为我没有看到它在任何地方设置?

总而言之,在使用UIManagedDocument时,如何定义将要使用的数据库模型?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-05 20:42:45

我找到了答案:

'UIManagedDocument‘从你的应用程序的主包中获取所有模型,并对这些模型进行联合。如果您只有一个模型,则使用该模型。

这可以通过重写'UIManagedDocument‘类来改变。

票数 6
EN

Stack Overflow用户

发布于 2013-02-05 19:19:37

加载数据模型在某些情况下,您不必编写任何代码来加载模型。如果您在OS X上使用基于文档的应用程序,NSPersistentDocument会为您管理查找和加载应用程序模型的任务。如果使用Xcode创建使用核心数据的非文档应用程序(用于OS X或iOS),则应用程序代理将包括检索模型的代码。模型的名称-由用于将其存储在磁盘上的文件名表示-在运行时并不相关。一旦Core Data加载了模型,文件名就没有意义,也没有任何用处,因此您可以随心所欲地命名模型文件。

如果要自己加载模型,可以使用两种机制:

您可以使用实例方法initWithContentsOfURL:从特定的URL加载单个模型。这是通常首选的技术。通常,一个应用程序只有一个模型,使用这种方法可以确保只加载该模型。您还可以通过URL加载各个模型,然后在使用它们实例化协调器之前使用modelByMergingModels:统一它们。

在您有多个模型的情况下-尤其是在模型代表同一模式的不同版本的情况下-知道要加载哪个模型是至关重要的(在运行时将具有相同实体的模型合并到一个集合中将导致命名冲突和错误)。如果您希望将模型存储在应用程序的bundle外部,因此需要通过文件系统URL引用它,则此方法也很有用。

您可以使用类方法mergedModelFromBundles:从特定的捆绑包集合创建合并模型。在模型分离并不重要的情况下,此方法可能很有用-例如,您可能知道您的应用程序和它所链接的框架都有您需要或想要加载的模型。类方法允许您轻松地一次加载所有模型,而不必考虑名称是什么,或者放入专门的初始化代码以确保找到所有模型。

在运行时访问和使用托管对象模型的

代码语言:javascript
复制
    NSManagedObjectModel *model = <#Get a model#>;
NSFetchRequest *requestTemplate = [[NSFetchRequest alloc] init];
NSEntityDescription *publicationEntity =
    [[model entitiesByName] objectForKey:@"Publication"];
[requestTemplate setEntity:publicationEntity];

NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:
    @"(mainAuthor.firstName like[cd] $FIRST_NAME) AND \
        (mainAuthor.lastName like[cd] $LAST_NAME) AND \
        (publicationDate > $DATE)"];
[requestTemplate setPredicate:predicateTemplate];

[model setFetchRequestTemplate:requestTemplate
    forName:@"PublicationsForAuthorSinceDate"];

使用获取请求模板

代码语言:javascript
复制
NSManagedObjectModel *model = <#Get a model#>;
NSError *error = nil;
NSDictionary *substitutionDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
    @"Fiona", @"FIRST_NAME", @"Verde", @"LAST_NAME",
    [NSDate dateWithTimeIntervalSinceNow:-31356000], @"DATE", nil];
NSFetchRequest *fetchRequest =
    [model fetchRequestFromTemplateWithName:@"PublicationsForAuthorSinceDate"
            substitutionVariables:substitutionDictionary];
NSArray *results =
    [aManagedObjectContext executeFetchRequest:fetchRequest error:&error];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14705959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档