帮助我根据条件得到结果

时间:2011-07-01 10:05:48

标签: iphone ios4 core-data

我创建了一个基于NSManagedObject的Users类,其中包含以下属性(id,name,age等)。

我正在使用核心数据模型,但我不确定如何进行以下操作......

现在我想知道如何根据用户ID获取用户详细信息。

示例:select * from users where id = 1

请帮帮我。

1 个答案:

答案 0 :(得分:1)

您应该使用 NSPredicate 类来执行SQL命令。代码:

NSManagedObjectContext *context = self.managedObjectContext; // specify your MOC object

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"users" inManagedObjectContext:context]; // specify your entity (table)
NSPredicate *predicate = [NSPredicate predicatewithFormat:@"id == %d",yourID]; // specify your condition (predicate)

[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];

NSError *error = nil;
NSArray *array = [context executeFetchRequest:fetchRequest error:&error]; // execute

[entity release];
[predicate release];
[fetchRequest release];

if (array == nil) {
    // Error: no objects returned
} else {
    // Success: do whatever you want
}

步骤1:Alloc / init NSFetchRequest

如果要执行查询,则需要分配/初始化NSFetchRequest对象。

第2步:选择实体

如果您想指定select * from users ...,则应使用NSEntityDescription

NSEntityDescription *entity = [NSEntityDescription entityForName:@"users" inManagedObjectContext:context];

最后,您需要通过以下方式将实体描述“附加”到NSFetchRequest对象:

[fetchRequest setEntity:entity];

第3步:条件

如果您想要条件(例如... where id = 1),则必须实施NSPredicate

NSPredicate *predicate = [NSPredicate predicatewithFormat:@"id == %d",yourID];

yourID必须是一个数字(例如12746)。

而且,再次:

[fetchRequest setPredicate:predicate];

第4步:让我们执行它!

NSArray *array = [context executeFetchRequest:fetchRequest error:&error];

满足条件的所有记录将作为NSManagedObjects数组返回。

第5步:发布对象

[entity release];
[predicate release];
[fetchRequest release];

第6步:做点什么

如果没有符合条件的对象,array对象将为nil。您可以通过以下方式检查并处理错误:

if (array == nil)

查看Core Data Programming Guide了解详情。 :)