Ich verwende oft Transformable
für Core Data attributes
, damit ich sie später ändern kann.
Es sieht jedoch so aus, als ob ich NSPredicate
verwenden möchte, um ein NSManagedObject
zu finden, indem ich "uniqueKey == %@"
oder "uniqueKey MATCHES[cd] %@"
verwende. Es funktioniert nicht so, wie es sollte.
Es fehlen immer übereinstimmende Objekte, bis ich die Attribute des uniqueKey des übereinstimmenden Objekts so ändere, dass sie eine bestimmte Klasse wie NSString
oder NSNumber
haben.
Kann jemand die Einschränkung der Verwendung von NSPredicate
mit Transformable
-Attributen erklären?
Hinweis : Ich bin mir nicht sicher, ob / wenn sich das seit 5/2011 geändert hat (von Scott Ahtens akzeptierter Antwort), aber Sie können absolut mit NSPredicate nach transformierbaren Attributen suchen. Scott hat richtig erklärt, warum deine Annahmen gebrochen wurden, aber wenn Kann jemand die Einschränkung der Verwendung von NSPredate mit transformierbaren Attributen erklären? war deine Frage, er deutete an, dass es nicht möglich ist, und das ist falsch.
>Da dies der erste Google-Treffer für " Core Data transformable value search nspredicate " ist (was ich suchte, um nach Inspiration zu suchen), wollte ich meine funktionierende Antwort hinzufügen.
Verwendung von NSPredate mit transformierbaren Eigenschaften
Kurze, berauschende Antwort: Sie müssen schlau über Ihre Datentransformatoren sein. Sie müssen den Wert in NSData umwandeln, die das enthält, was ich "primitive identifizierende Information" nenne, d. H. Die kleinste, höchst identifizierbare Menge von Bytes, die zur Rekonstruktion Ihres Objekts verwendet werden kann. Lange Antwort, ...
In erster Linie:
Nun, nach diesen Überlegungen sind transformierbare Attribute ziemlich glatt. Ehrlich gesagt, schien das Schreiben eines NSValueTransformers "FooToData" für Foo-Instanzen in NSData sauberer als das Schreiben von viel adhoc-benutzerdefiniertem Code. Ich habe keinen Fall gefunden, in dem Core Data nicht weiß, dass es die Daten mithilfe des registrierten NSValueTransformers transformieren muss.
Um fortzufahren, gehen Sie einfach auf diese Bedenken ein:
Sie möchten wahrscheinlich Transformationen nicht stark beanspruchte Datenoperationen verwenden - z. ein großer Import, bei dem die Primärschlüsselinformationen Transformatoren verwenden - yikes!
Und dann benutze ich das am Ende einfach, um auf Modellen mit NSPredicates nach Gleichheit für High-Level-Objektattribute zu suchen - z. "% K ==% @" - und es funktioniert gut. Ich habe einige der verschiedenen übereinstimmenden Begriffe nicht ausprobiert, aber ich wäre nicht überrascht, wenn sie manchmal und andere nicht arbeiten würden.
Hier ist ein Beispiel für einen NSURL to NSData-Transformer. Warum nicht einfach die Zeichenfolge speichern? Ja, das ist in Ordnung - das ist ein gutes Beispiel für benutzerdefinierten Code, der das gespeicherte Attribut maskiert. Dieses Beispiel veranschaulicht, dass der stringifizierten URL ein zusätzliches Byte hinzugefügt wird, um aufzuzeichnen, ob es sich um eine Datei-URL handelte oder nicht - damit können wir wissen, welche Konstruktoren beim Entpacken des Objekts zu verwenden sind.
%Vor%...
%Vor%Transformierbare Attribute werden normalerweise als archivierte Binärdaten beibehalten. Daher versuchen Sie, eine Instanz von NSData mit einer Instanz von NSString oder NSNumber zu vergleichen.
Da diese Klassen die gleichen Daten auf verschiedene Arten interpretieren, werden sie nicht als übereinstimmend betrachtet.
Tags und Links nspredicate ios xcode core-data transformable