【发布时间】:2011-09-02 14:47:06
【问题描述】:
我对 iOS/Cocoa 还很陌生,我有一个关于核心数据的非常基本的问题。我在网上寻找合适的答案/解决方案,但找不到。
所以问题是您如何处理核心数据的唯一性?我知道核心数据不是数据库,它类似于对象图。假设我们有一个名为“User”的实体,它具有“id”和“name”属性以及与其他实体的一些关系。现在我们要更新特定用户的名称(例如,网络服务给了我们 id 和新名称)。
这是我之前的做法:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:context]];
[request setPredicate:[NSPredicate predicateWithFormat:@"id == %@", anId]];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
User *user = [results lastObject];
但我听说这是不好的做法。是因为带有谓词的获取请求非常慢吗?我无法想象这是一件大事。据我所知,除了遍历每个对象并检查是否相等之外,没有其他方法可以获取唯一对象。
获取实体的所有对象,将它们放入一个数组并手动循环遍历它(而不是获取请求)会更有效吗?
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:context]];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
User *resultUser;
for(User *user in results){
if([user.id isEqual:anId]) resultUser = user;
}
请帮助我找到正确的路径,谢谢。
【问题讨论】:
标签: ios cocoa core-data unique