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)
谓词是表达式.如果表达式的计算结果为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)
或者您正在输出的任何其他财产.