2017-12-06 3 views
2

Egal, was ich versuche, wenn ich versuche, auf einen von mr_findAll zurückgegebenen Datensatz zuzugreifen, Daten können immer nicht gelesen werden.MagicalRecord immer Fehler - Daten können nicht gelesen werden

Bitte haben Sie Verständnis Ich habe eine Reihe von Informationen hier unkenntlich so dass der Code so etwas wie

sieht
var results: [Unit] = [] 

let predicate: NSPredicate? = NSPredicate(format: "abc == %@ AND def == %@", abc, def) 

results = Unit.mr_findAll(with: predicate, in:NSManagedObjectContext.mr_default()) as! [Unit] 

Drei Ergebnisse werden zurückgegeben, das ist das, was ich erwarte; Wenn ich sie in der Konsole untersuchen sehen sie aus wie:

po Ergebnisse

▿ 3 Elemente

  • 0: app.Unit: 0x6080002959a0> (Einheit: Einheit; id: 0xd00000000004000a x- coredata: // 08DA3A42-AFDA-4280-A5B5-4E1267509CFC/Einheit/p1>; Daten: Fehler)
  • 1: App.Unit: 0x608000295b30> (Einheit: Einheit; ID: 0xd00000000008000a x-coredata: // 08DA3A42- AFDA-4280-A5B5-4E1267509CFC/Einheit/p2>; Daten: Fehler)
  • 2: App.Unit: 0x608000295d10> (Einheit: Einheit; ID: 0xd0000000000c000a x-coredata: // 08DA3A42-AFDA-4280-A5B5-4E1267509CFC/Einheit/p3>; Daten: Fehler)

ich dann versuchen, und die Ergebnisse zugreifen:

for result in results { 
     let ghi = result.ghi 
     let jkl = result.jkl 

Am ersten möglichen Zugang zu einem Mitglied der Ergebnisse, die ich ein EXC_BAD_INSTRUCTION bekommen und im Inspektoren Ich sehe nicht in der Lage zu Daten lesen.

Ich habe verschiedene Möglichkeiten versucht, den Zugriff auf ein Ergebnis "zu verrechnen", wie ich gelesen habe, sobald Sie auf ein Mitglied eines fehlerhaften Datensatzkerns zugreifen, werden Daten es jedoch vergeblich holen.

Wenn ich Anfragen holen wurde mit konnte ich

returnsObjectsAsFaults = false 

vor, ich nichts in der MagicalRecord Schnittstelle, die den oben oder etwas ähnliches erlaubt sehen.

Ich freue mich wirklich für

  • eine Technik, die ich nicht bekommen, Fehler werden sicherstellen ODER
  • eine Technik, die den Fehler absolut lösen.

Jede Hilfe sehr geschätzt.

Antwort

2

Die Verwendung von NSManagedObjectContext.mr_default() ist nicht Thread-sicher. Es ist besser, den lokalen Kontext zu verwenden, z. B.

var results: [Unit] = [] 
MagicalRecord.save(blockAndWait: { (localContext) in 

    let predicate: NSPredicate? = NSPredicate(format: "abc == %@ AND def == %@", abc, def) 
    results = Unit.mr_findAll(with: predicate, in:localContext) as! [Unit] 
}) 
+0

getestet und funktionsfähig – Damo

Verwandte Themen