iphone - CoreData 查找字符串 - NSPredicate 或 for 循环?

标签 iphone ios objective-c xcode core-data

抱歉我的英语不好,我是 CoreData 的初学者。

现在我试图查找 NSString 是否确实存在于数据库中,

有两种方法,一种是使用NSPredicate做请求,

如果 results array count >= 1,意味着在数据库中找到了一些东西

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"itemid == %@", self.item.itemid]];
 NSError *error = nil;
 NSArray *results = [context executeFetchRequest:fetchRequest error:&error];

还有一个是在数组中做循环

 for (int i=0; i<=[keyArray count]-1 ; i++) {
            NSString *keyID = [keyArray objectAtIndex:i];
            if ([keyID isEqual:stringToCompare])
                return YES;
                break;
    return NO;
 }

我现在正在使用第一种方法,但是有人可以给我一些建议吗?

哪个最适合性能? 谢谢!

最佳答案

您的第二个方法(数组循环)要求从数据库中获取所有对象, 所以这应该比第一种方法慢,后者只获取匹配的对象。

如果您只对存在感兴趣,您甚至可以改进第一种方法 具有给定键的对象,通过将结果集限制为一个对象,并使用 countForFetchRequest 而不是实际获取对象:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"itemid == %@", self.item.itemid]];
[fetchRequest setFetchLimit:1];
NSUInteger count = [context countForFetchRequest:fetchRequest error:&error];
if (count == NSNotFound)
    // some error occurred
else if (count == 0)
    // no matching object
else
    // at least one matching object exists

关于iphone - CoreData 查找字符串 - NSPredicate 或 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18710331/

相关文章:

ios - 在 iOS 7 中完成某些操作后显示文本警报

iphone - 获取 UITableViewCell 上的 UITextField 的引用?

iphone - 使用 OpenGL-ES 2.0 的透明纹理

iphone - 以表单形式呈现时难以将 View Controller 居中

由于核心数据迁移,iOS 应用程序在启动屏幕上崩溃

ios - Realm - 在 realm.create 中捕获异常

ios - 如何通过编程打电话

ios - CloudKit - 如何共享多个记录和检索共享记录?

ios - 让UIView不断淡入淡出——完成:^{ possible infinite loop?

objective-c - 将 NSArray 传递给 cpp 函数