2012-04-14 10 views
0

Ich habe ein Problem, wo ich Entitäten A in einem Kontext einfügen. Gleich nachdem ich alle Einheiten einfügen ausführen AI eine Anfrage auf dem Kontext holen:NSFetchRequest kann Entität im Kontext nicht abrufen

NSEntityDescription* entity = [NSEntityDescription entityForName:@"A" inManagedObjectContext:ctx]; 
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:entity]; 
NSError* fetchError; 
NSArray* results = [ctx executeFetchRequest:fetchRequest error:&fetchError]; 

Dieser Code oben ist in der Lage, alle von ihnen zu bekommen und ich kann sie in der NSLog sehen ...

Recht ich nach auf dem gleichen Kontext versuchen, alle Einheiten zu holen A, das Alter = 5, wie diese:

NSEntityDescription* entity = [NSEntityDescription entityForName:@"A" inManagedObjectContext:ctx]; 
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:entity]; 
NSPredicate *filter = [NSPredicate predicateWithFormat:@"%K == %@",attr,value]; 
[fetchRequest setPredicate:filter]; 
NSError* fetchError; 
NSArray* results = [ctx executeFetchRequest:fetchRequest error:&fetchError]; 

THE (I "Alter" die attirbute und ein NSString @ "5" auf den Wert zuweisen) PROBLEM IST, dass, obwohl der NSLog eine Entität A mit Alter 5 diese letzte Abrufanforderung r zeigt ist immer Null! Nichts.

Irgendwelche Vorschläge? Warum zeigt das Abrufen von allen Entitäten mit einem Alter von 5 Jahren und das Filtern für ein Alter von 5 nur nicht gleich danach im selben Kontext?

Dank

+0

Welcher Typ ist Alter im Modell? –

+0

NSNumber (Integer 64), auch, ich habe gerade herausgefunden, dass, wenn ich das Prädikat zu @ "age == 5" hart Code, dann funktioniert es. Jetzt bin ich verwirrt. – zumzum

+0

% @ mit einem String-Argument fügt Anführungszeichen für einen String-Vergleich ein. Wenn die Daten keine Zeichenfolge sind, wird es nicht vergleichen ... weshalb ich den Typ gefragt habe ... –

Antwort

3

Versuchen Sie, Alter auf eine Instanz NSNumber initialisiert bis 5 statt der NSString @ "5".

+0

Arbeitete. Verdammt, so dachte ich, dass ich immer eine Saite in einem NSPredate liefern könnte ... Ich nehme an, weil Alter eine NSNummer ist, dann macht es Sinn, dass dein Vorschlag funktioniert, aber, könntest du mir vielleicht einen Hinweis geben, warum ich nicht einfach kann in diesem Fall einen NSString übergeben? Was fehlt mir hier? Vielen Dank!! – zumzum

+0

Wenn Sie eine Zeichenfolge als Argument an ein Prädikat übergeben, wird sie automatisch in eine "Zeichenfolge" mit Anführungszeichen konvertiert, die nicht mit einem Wert von 5 verglichen wird. –

+0

Sinnvoll. Vielen Dank. – zumzum

Verwandte Themen