NSInvalidUnarchiveOperationException kann den Objektfehler in der Apple Watch-Erweiterung nicht dekodieren

8

Ich habe ein Benutzerobjekt, das ich in NSUserDefaults speichern und mit einer iOS 8-Erweiterungs-App (Watchkit) teilen muss. In der Hauptcontainer-App kann ich das Objekt problemlos codieren und dekodieren. Wenn ich versuche, das gespeicherte Benutzerobjekt in der Erweiterung abzurufen, erhalte ich jedoch einen "'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class" -Fehler.

Soweit ich sehen kann, wurde NSCoding korrekt im Objekt implementiert (und ich kann das Objekt in der 'main' App kodieren und dekodieren).

Code in der 'Container'-App zum Speichern des Benutzerobjekts.

%Vor%

Die letzte Zeile oben, um eine Test-Dekodierung in der Haupt-App durchzuführen funktioniert gut.

Der Code zum Abrufen von NSUserDefaults und Dekodieren im Erweiterungsziel ist unten.

%Vor%

Im Erweiterungscode bekomme ich eine "NSInvalidUnarchiveOperationException", Grund: '*** - [NSKeyedUnarchiver decodeObjectForKey:]: Objekt der Klasse "

" kann nicht dekodiert werden

Irgendwelche Vorschläge, wo ich anfangen sollte zu suchen? Die App kompiliert gut, was zu der Annahme führt, dass die erforderlichen Frameworks in das Erweiterungsziel aufgenommen wurden.

    
YogiBotics 30.11.2014, 10:43
quelle

1 Antwort

9

Damit Ihre WatchKit-Erweiterung SFUserAccount-Objekte dekodieren kann, muss sie die SFUserAccount-Klasse verstehen. Um dies zu ermöglichen, sollte es zu Ihrer WatchKit-Erweiterung hinzugefügt werden.

  1. Klicken Sie im Projektnavigator oben in der linken Spalte von Xcode auf Ihren Projektnamen. (Drücken Sie Cmd-1, um den Projektnavigator anzuzeigen, wenn er ausgeblendet ist.
  2. Klicken Sie auf, um den Namen Ihrer WatchKit-Erweiterung auf der linken Seite des Hauptfensters unter 'Ziele' zu markieren. (HINWEIS: Markieren Sie Ihre WatchKit Erweiterung , nicht die WatchKit App.
  3. Wählen Sie in den Elementen oben oben "Build Phases".
  4. Verwenden Sie neben "Quellen kompilieren" das Dreieck, um den Abschnitt anzuzeigen, wenn er nicht bereits sichtbar ist.
  5. Klicken Sie unten im Abschnitt auf das "+", um eine neue Quelle hinzuzufügen.
  6. Wählen Sie in der Liste die .m-Datei für die Klasse aus, die Sie hinzufügen möchten (in diesem Fall die Datei SFUserAccount.m).
  7. Klicken Sie auf "Hinzufügen".
  8. Erstellen und ausführen.
Duncan Babbage 11.01.2015 03:29
quelle