2016-08-03 44 views
1

kann nicht analysiert werden. Ich habe zwei Entitäten mit dem Namen "CIUser" und "CICast". "CIUser" -Entity hat eine Eins-zu-Eins-Beziehung mit "CICast" mit dem Namen "cast".NSPredicate: Die Formatzeichenfolge für die Beziehung

Jetzt ist meine Anforderung, alle Benutzer zu holen, die gerade leben und dort ist LASTUpdate weniger als ein berechnetes Datum. So hatte ich vorbereitet Anfrage holen meine wie

let time = //an calculated NSDate object 

let fetchRequest = NSFetchRequest(entityName: "CIUser") 
fetchRequest.predicate = NSPredicate(format: "isLive == %@ AND cast.lastUpdate <= %@", NSNumber(bool: true), time) 

Aber es Absturz der Anwendung werfen *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "isLive == %@ AND cast.lastUpdate <= %@"'

mir jemand kann helfen, wo ich falsch mache, oder was Ansatz sollte ich nehmen. Vorschlag wird geschätzt.

Antwort

3

Das Problem ist, dass „CAST“ ist ein reserviertes Wort im Prädikat Format Syntax und die reservierten Worte Groß- und Kleinschreibung. Das steht also mit Ihrer Beziehung namens "Besetzung".

Als Abhilfe verwenden, um die %K Schlüsselpfad Substitution:

fetchRequest.predicate = NSPredicate(format: "isLive == %@ AND %K <= %@", 
          NSNumber(bool: true), "cast.lastUpdate", time) 

oder die Beziehung umbenennen. Sie können die %K Expansion im Allgemeinen zu vermeiden, solche Probleme verwenden mögen:

fetchRequest.predicate = NSPredicate(format: "%K == %@ AND %K <= %@", 
          "isLive", NSNumber(bool: true), 
          "cast.lastUpdate", time) 

Weitere Informationen Predicate Format String Syntax in dem "Prädikat Programming Guide" sehen.

+0

Dank @Martin, es funktioniert wie ein Charme. –