核心数据NSFetchrequest整数

Fxb*_*aez 0 core-data objective-c nsfetchrequest ios

我有以下场景.我有一个使用Core Data处理数据的应用程序.我有一个名为"兄弟"的实体,它有3个属性:名称,状态,年龄.

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

-Name   ==> Joe (String)
-Status ==> Married (String)
-Age    ==> 28 (Integer)
Run Code Online (Sandbox Code Playgroud)

我有一个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;
Run Code Online (Sandbox Code Playgroud)

更新#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];
                              }

}
Run Code Online (Sandbox Code Playgroud)

Tom*_*mmy 5

谓词是表达式.如果表达式的计算结果为true,则表示满足谓词.因此,如果你按年龄搜索,你会使用例如

[NSPredicate predicateWithFormat:@"age = %d", [self.age.text integerValue]]
Run Code Online (Sandbox Code Playgroud)

或者通过名字:

[NSPredicate predicateWithFormat:@"name = %@", someNameOrOther]
Run Code Online (Sandbox Code Playgroud)

或两者兼得:

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

获取请求获取实际的NSManagedObjects.所以你得到了一系列的Brothers.因此,你可能想要更像这样的东西来输出一个名字:

if([array count])
    self.displayLabel.text = [array[0] name];
Run Code Online (Sandbox Code Playgroud)

或者对于一个年龄:

...
    self.displayLabel.text = [[array[0] age] stringValue];
Run Code Online (Sandbox Code Playgroud)

或者您正在输出的任何其他财产.