2016-04-13 9 views
1

Ich möchte gerade und ungerade Werte von meinem Kerndatenelement abrufen, bitte unten in Code und korrigieren, weil es die App abstürzt.So holen Sie gerade und ungerade Werte aus Kerndaten mit Prädikat

 NSPredicate *predicate; 
     if ([leadFilter.rank isEqualToString:@"Even"]) { 
      predicate = [NSPredicate predicateWithFormat:@"(street%2) = 0"]; 
     } 
     else 
      predicate = [NSPredicate predicateWithFormat:@"street%2 != 0)"]; 
     [predicateArray addObject:predicate]; 

Sein sagen derzeit keine Straße% 2 = 0 analysieren.

Antwort

7

Sie können dies direkt in Core Data tun, aber die Syntax ist ein wenig haarig. Um nur die Werte von street zu holen, die auch sind, richten Sie wie folgt holen:

NSExpression *evenOddExpression = [NSExpression expressionWithFormat:@"modulus:by:(%K,2)", @"street"]; 

NSFetchRequest *evenOddFetch = [NSFetchRequest fetchRequestWithEntityName:@"ENTITY_NAME"]; 

NSExpression *zeroExpression = [NSExpression expressionForConstantValue:@0]; 
NSPredicate *evenOnly = [NSComparisonPredicate predicateWithLeftExpression:evenOddExpression rightExpression:zeroExpression modifier:NSDirectPredicateModifier type:NSEqualToPredicateOperatorType options:0]; 
evenOddFetch.predicate = evenOnly; 

Das Ergebnis wird sein, je nachdem, welcher verwaltete Objekt haben einen geraden Wert von street.

Update: Es wurde einfacher gemacht, nachdem Marcus darauf hingewiesen hat, dass NSDictionaryResultType nicht wirklich benötigt wurde.

+0

Ja Tom deine Antwort ist auch richtig, es löste mein Problem, nachdem ich es ein wenig modifiziert habe, Danke für Ihre wertvolle Zeit und Wissen teilen. –

+1

Warum wird ein 'NSDictionaryResultType' benötigt? –

+1

... und Sie können die behaarte Syntax kurzschließen: 'NSPredicate * evenOnly = [NSPredicate PrädikatWithFormat: @" Modul: von: (Straße, 2) == 0 "];' – pbasdf

3

Diese Art von Mathe in einem Prädikat wird nicht unterstützt.

Umgehung:

eine boolean erstellen Eigenschaft berechnet isEven in der NSManagedObject Unterklasse

- (BOOL)isEven 
{ 
    return self.street % 2 == 0 
} 

und das Format isEven == TRUE oder isEven == FALSE im Prädikat.

predicate = [NSPredicate predicateWithFormat:@"isEven == TRUE)"]; 
+0

Danke Vardian für Ihre Hilfe. –

+0

Nicht wahr. Siehe meine Antwort. :) –