抱歉我的英语不好,我是 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/