Fxbaez
Fxbaez

Reputation: 193

Core Data NSFetchrequest integer

I have the following scenario. I have an app that handles data by using Core Data. I have an entity called "Brothers" which has 3 attributes: Name, Status, Age.

lets say that I have 1 record on my database that has:

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

I have an UIlabel a UItextfield and a Button. I want to be able to type the name (in this case Joe) on the UItextfield press the button and display the age (in this case 28) in the UILabel. I would also like to store the age value into a variable type integer so I can make some calculations with it later on.

below the code that I have inside the button.

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;

Update #1

I updated the code that i have inside the button and now i am able to search by the name and display the age. I'm still looking into storing the age as an integer into a variable so i can use it later on.

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];
                              }

}

Upvotes: 0

Views: 2209

Answers (2)

Tommy
Tommy

Reputation: 100622

A predicate is an expression. If the expression evaluates to true then the predicate is satisfied. So if you were searching by age you'd use e.g.

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

Or by name:

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

Or by both:

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

A fetch request gets the actual NSManagedObjects. So you'd get back an array of Brothers. Therefore you probably want something more like this to output a name:

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

Or for an age:

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

Or whatever other property you're outputting.

Upvotes: 5

Arthur Shinkevich
Arthur Shinkevich

Reputation: 801

I think your predicate is wrong, the proper format would be this:

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

Upvotes: 1

Related Questions