• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

NSExpression mit NSComparisonPredicate und NSCompoundPredicate

BluyMul

Idared
Registriert
21.06.13
Beiträge
29
Hallo liebe Forengemeinde,

ich hab ne kleine Verständnis frage zu diesem Beispiel.

Code:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]initWithEntityName:EnitiyName];
   
    NSPredicate     *keyPredeicate      = [NSPredicate predicateWithFormat:@"nrPerson == %i",nrPers];
   
    NSExpression    *maxKeyExpression   = [NSExpression expressionForKeyPath:@"nrBeitrag"];
    NSExpression    *maxExpression      = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:maxKeyExpression]];
    NSPredicate *maxPredicate = [NSComparisonPredicate
                                 predicateWithLeftExpression:maxKeyExpression
                                 rightExpression:maxExpression
                                 modifier:NSDirectPredicateModifier
                                 type:NSEqualToPredicateOperatorType
                                 options:0];
   
    NSPredicate *lastPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:maxPredicate, keyPredeicate, nil]];
    [fetchRequest setPredicate:lastPredicate];
   
    NSError *error = nil;
    assert(!error);
    NSArray *objects = [cdm executeFetchRequest:fetchRequest error:&error];

als Fehlerbekomme ich :
[__NSCFNumber count]: unrecognized selector sent to instance

Abbilden möchte ich gerne diesen SQL
Select * from Beitrag where nrPerson == nrPers and nrBeitrag == max(nrBeitrag);

Laut meinem Verständnis der Beispiele von Apple, sollte dieses Funktionieren.
Aber nach dem Fehler wird wohl das Erste Predicate als Number zurückgeben und nicht als Ausdruck von (nrBeitrag == max(nrBeitrag)).

Könnt ihr mir eventuell ein paar Tips oder Erklärungen geben wie ich dieses Richtig verstehen kann?

Grüsse BluyMul
 
So nun habe ich eine Lösung gefunden :-)
wenn man es mal ein paar Tage Liegen lässt und den Kopf frei macht
findet man die Lösung :-)

Die Lösung ist das oberste Predicate bei "nrPerson==%i"
selbst in eine NSExpression zusetzten und diese beiden dann per NSCompoundPredicate zusammen zusetzten.

Ich wünsch euch noch eine Gute Nacht.
 
Hallo,

nach langer Programmierung der Contrains bin ich bei meinen Testdaten gelandet,
meine Lösung wie oben beschrieben funktioniert solange es keine weitere Person gibt.

Kann mir wer helfen also als Prädikate benutze ich diese abfragen

nrPerson == nrPers and nrBeitrag == max(nrBeitrag)

solange ich nur eine Person habe ist alles ok aber sobald ich eine weitere Person habe wird es nicht mehr ermittelt.
bzw findet keine Objekte keine mehr

:-(

ist sicherlich ne Kleinigkeit aber ich find sie nicht :-D

über nen dialog würde ich mich freuen kann auch per pn sein
 
Zuletzt bearbeitet: