0

我有以下情况。我有一个使用 Core Data 处理数据的应用程序。我有一个名为“Brothers”的实体,它有 3 个属性:姓名、状态、年龄。

假设我的数据库中有 1 条记录:

-Name   ==> Joe (String)
-Status ==> Married (String)
-Age    ==> 28 (Integer)

我有一个 UIlabel 一个 UItextfield 和一个按钮。我希望能够在 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];
                              }

}
4

2 回答 2

5

谓词是一个表达式。如果表达式的计算结果为真,则满足谓词。所以如果你按年龄搜索,你会使用例如

[NSPredicate predicateWithFormat:@"age = %d", [self.age.text integerValue]]

或按名称:

[NSPredicate predicateWithFormat:@"name = %@", someNameOrOther]

或两者兼而有之:

[NSPredicate predicateWithFormat:@"(name = %@) and (age = %d)", someNameOrOther, [self.age.text integerValue]]

获取请求获取实际NSManagedObject的 s。所以你会得到一个s数组Brother。因此,您可能想要更像这样的东西来输出名称:

if([array count])
    self.displayLabel.text = [array[0] name];

或者对于一个年龄:

...
    self.displayLabel.text = [[array[0] age] stringValue];

或您输出的任何其他属性。

于 2013-09-03T19:05:11.797 回答
1

我认为你的谓词是错误的,正确的格式是这样的:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age.integerValue == %d", [self.age.text integerValue]];
于 2013-09-03T19:01:30.077 回答