核心数据 NSFetchrequest 整数

Posted

技术标签:

【中文标题】核心数据 NSFetchrequest 整数【英文标题】:Core Data NSFetchrequest integer 【发布时间】: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] 【参考方案1】:

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

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

或按名称:

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

或两者兼而有之:

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

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

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

或者对于一个年龄:

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

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

【讨论】:

OP 说要按名称搜索,因此谓词应该按名称而不是按年龄过滤。 @JuanCatalan 你是对的。从他的代码开始,我完全忽略了他的描述。我有时是一个非常盲目的人。我会解决的。【参考方案2】:

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

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

【讨论】:

实际上不需要“integerValue”,@"age = %d", someInt" 应该可以。但是OP说他要搜索name并显示age

以上是关于核心数据 NSFetchrequest 整数的主要内容,如果未能解决你的问题,请参考以下文章

默认情况下,核心数据获取(NSFetchRequest)是不是以任何特定方式排序?

使用 NSPredicate 的特定对象内的核心数据 NSFetchRequest

iPhone 核心数据 NSFetchRequest

iPhone 核心数据:具有不同属性和字母部分的 NSFetchRequest

如何在一个 NSFetchRequest 中获取核心数据关系?

核心数据中的 NSFetchRequest