【发布时间】:2013-09-03 18:54:40
【问题描述】:
我有以下情况。我有一个使用 Core Data 处理数据的应用程序。我有一个名为“Brothers”的实体,它有 3 个属性:姓名、状态、年龄。
假设我的数据库中有 1 条记录:
-Name ==> Joe (String)
-Status ==> Married (String)
-Age ==> 28 (Integer)
我有一个 UIlabel、一个 UItextfield 和一个 Button。我希望能够在 UItextfield 上键入名称(在本例中为 Joe),按下按钮并在 UILabel 中显示年龄(在本例中为 28)。我还想将年龄值存储到一个变量类型的整数中,以便以后可以用它进行一些计算。
在按钮内的代码下方。
NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Brothers" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
[request setEntity:entitydesc];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age %d", [self.age.text integerValue]];
[request setPredicate:predicate];
NSError *error;
NSArray *integer = [context executeFetchRequest:request error:&error];
self.displayLabel.text = integer;
更新 #1
我更新了按钮内的代码,现在我可以按名称搜索并显示年龄。我仍在考虑将年龄作为整数存储到变量中,以便以后使用。
NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Brothers" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
[request setEntity:entitydesc];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstname like %@", self.firstnameTextField.text];
[request setPredicate:predicate];
NSError *error;
NSArray *integer = [context executeFetchRequest:request error:&error];
if(integer.count <= 0){
self.displayLabel.text = @"No records found";
}
else {
NSString *age;
for (NSManagedObject *object in integer) {
age = [object valueForKey:@"age"];
}
self.displayLabel.text = [NSString stringWithFormat:@"age: %@",age];
}
}
【问题讨论】:
-
如果要搜索name,为什么要使用带有age的谓词? - 将 NSArray 分配给文本字段? - 阅读“Core Data Programming Guide”和“Predicate Programming Guide”可能会有所帮助。
-
我的错误。我刚刚修复了它,并将在帖子中编辑代码。当我按名字搜索时,我能够在我的 UILabel 上显示年龄。我仍在尝试将年龄值作为整数存储到变量中。
-
如果 "age" 被定义为 Core Data "Integer" 属性,则该值存储为 NSNumber。所以
NSNumber *age = [object valueForKey:@"age"],您可以将其转换为纯整数:int i = [age intValue]。
标签: ios objective-c core-data nsfetchrequest