2017-03-05 1 views
0

Ich habe eine EventDec Einheit, die eventStatus Attribut hat und ich möchte nur das Ergebnis dieses Attributs anzeigen. Hier ist mein CodeBinär-Operator kann nicht auf NSpredicate und Int

let fetchRequestDec = NSFetchRequest<NSFetchRequestResult>(entityName: "EventDec") 
    fetchRequestDec.predicate = NSPredicate(format:"eventStatus = %i") 
    let result = fetchRequestDec.predicate 
if (result == 1) 
    { 
     print("Status = 1") 
    } 
    else 
    { 
     print("Status = 2") 
    } 

Also bin ich Filterung falsch, wie ich diesen Fehler bekomme. Wie kann ich das beheben?

Binary Operator '==' kann nicht auf NSPredicate angewendet werden und int

+1

Es ist nicht die Filterung, es ist das Ergebnis == 1 Zeilen. Ergebnis ist ein NSPredikat, 1 ist ein int, daher kann der binäre Operator '==' nicht verwendet werden. – dylanthelion

+0

Ok, also wie löst man das auf? – Coder221

+0

Entweder einen int-Wert dem Ergebnis zuweisen (let result = 4 oder was auch immer), oder mit einem anderen NSPredate vergleichen (if result == NSPredate (format: "eventStatus = 6")). Ich kann Ihnen nicht genau sagen, was zu tun ist, ohne weitere Informationen darüber, was dieser Ausschnitt machen soll. Was genau überprüfen Sie? – dylanthelion

Antwort

1

Warum versuchen Sie, ein Prädikat zu benutzen? Ihre Frage scheint das EventDec-Objekt zurückzugeben und das eventStatus-Attribut auszugeben. Sie müssen einen Abruf durchführen. Holen Sie sich das Ergebnis-Array. Extrahiere, was du willst. Keine Filterung erforderlich.

let fetchRequest: NSFetchRequest<EventDec> = EventDec.fetchRequest() 
if let results = try? context.fetch(fetchRequest) { 
    for result in results { 
    print("Status = \(result.eventStatus)") 
    } 
} 

Dies setzt voraus, dass Ihr managedObjectContext Kontext genannt wird. Auch Sie haben einen Tippfehler eventStaus ein statt eventStatus

+0

Danke für Tippfehler. Aber das hat nicht funktioniert – Coder221

+0

Nur festgestellt, ich hatte aus meinem eigenen Code noch in der FetchRequest. Wenn Sie es ändern in 'let fetchRequest: NSFetchRequest = EventDecfetchRequest() 'hilft das? – Magnas

+0

Ich habe es ausprobiert, es druckt nur aus Status = /(result.eventStatus) – Coder221

1

Okay, froh, dass ich dies auf einem Spielplatz überprüft, weil Apple eine Menge Teilzeichenfolge Änderungen mit Swift 3.0 gemacht. Versuchen Sie dieses, Ihr Prädikat des Int-Wert zu drucken (Sie können auch den Wert zugreifen können, indem Sie den Code ein wenig zu ändern):

let index = fetchRequestDec.predicate.predicateFormat.index(fetchRequestDec.predicate.predicateFormat.endIndex, offsetBy: -1) 
print("Status: \(Int(String(fetchRequestDec.predicate.predicateFormat[index]))!)") 
+0

Wert des Typs 'NSFetchRequest ' hat kein Mitglied Prädikat Format – Coder221

+0

Oh, ja, tut mir leid, die Eigenschaft ist ein NSPredikat. Ich werde meine Antwort sofort aktualisieren. – dylanthelion

+0

Was sollte fetchRequestDec sein? Da sehe ich Sie nicht involviert eventStatus Attribut. So bekomme ich Null (fataler Fehler) – Coder221

Verwandte Themen