我在这里没有看到任何其他类似的问题,但我希望有人有一些见解。我刚刚开始学习核心数据。
基本上,我有两种方法,我想根据“Contacts”表是否包含任何记录来选择使用if / else语句调用哪一种方法。 是否有办法使用核心数据来检查表中是否有任何记录?
到目前为止,我发现的最好的方法是将fetchLimit设置为1,然后检查是否有任何返回。
[request setFetchLimit:1];
但我一直认为必须有更好/更简单的方法。任何人都知道或有一个很好的参考我可以看看?
非常感谢!
答案 0 :(得分:4)
是的,绝对有更好的方法。像往常一样设置一个获取请求,但是,如果它已经传递给executeFetchRequest:error:
这可以使用
完成- (NSUInteger)countForFetchRequest:(NSFetchRequest *)request error:(NSError **)error;
这样的事情:
- (int) numberOfContacts{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSManagedObjectContext *managedObjectContext = yourManagedObjectContext;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contacts" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSError *error = nil;
NSUInteger count = [managedObjectContext countForFetchRequest:request error:&error];
[request release];
if (!error){
return count;
}
else
return -1;
}
答案 1 :(得分:2)
它不一定更好或更容易,但您可以查找特定记录,然后创建它,如果它不存在这样:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact"
inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSError *error;
// Filter based on a predicate
[fetchRequest setPredicate:
[NSPredicate predicateWithFormat:@"identifier == %@", @"1"]];
NSManagedObject *contact = [[managedObjectContext
executeFetchRequest:fetchRequest error:&error] lastObject];
// If the contact was not found
if (!contact)
{
// Create the contact
contact = [NSEntityDescription insertNewObjectForEntityForName:@"Contact"
inManagedObjectContext:managedObjectContext];
[contact setValue:[NSNumber numberWithInt:1] forKey:@"identifier"];
[managedObjectContext save:nil];
}
Marcus Zarra发布了some code,在Feed阅读器应用中展示了这一点。 Marcus是核心数据大师。