をデコードすることはできません。「*** - [NSKeyedUnarchiver:キャッチされない例外により「NSInvalidUnarchiveOperationException」、理由にアプリを終了NSKeyedUnarchiverは、クラスのオブジェクトNSKnownKeysDictionary1
decodeObjectForKey:]:キー(NS.objects)のクラス(NSKnownKeysDictionary1)のオブジェクトをデコードできません。クラスはソースコードまたはリンクされていないライブラリで定義されている可能性があります。 '
コンテキスト:「共有リンク」拡張を作成しています。私の主なアプリ(Objective Cで書かれています)では、MMWormholeを使ってリンクに関する情報を含む辞書の配列を書きます。
NSFetchRequest* bookmarkFetch = [NSFetchRequest fetchRequestWithEntityName:@"XX"];
bookmarkFetch.propertiesToFetch = @[
@"name", @"text", @"date", @"url"
];
bookmarkFetch.resultType = NSDictionaryResultType;
NSArray* bookmarks = [moc executeFetchRequest:bookmarkFetch error:NULL];
[wormhole passMessageObject:bookmarks identifier:@"XXX"];
配列の値は、NSStringsとNSDateです。あなたが得るMMWormholeの腸で
:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:messageObject];
messageObjectは、任意の中間処理せずに、単にブックマーク配列です。
let wormhole = MMWormhole(applicationGroupIdentifier: "group.XX", optionalDirectory:nil)
let bookmarks = wormhole.messageWithIdentifier("XXX") as? Array<Dictionary<String,AnyObject>>
messageWithIdentifier::私が持っている拡張機能で
が最終的にこれを呼び出す終わる:
id messageObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];
を配列が正しくアプリのグループフォルダに書き出される - 私が使用してそれを読むことができます別の拡張、目的Cで書かれたもの。
この例外は、シミュレータで実行したときに表示されます。コードは、32ビットデバイス(iPhone 5およびiPad 3)で実行したときに正しく動作するように、と表示されます。私は現在64ビットデバイスをテストしていません。
私はimport
またはフレームワークが欠けていると思いますが、どちらが1つですか?
でdata' 'の形式は何ですかポイント 'NSKetedUnarchiver'が呼び出されますか?最初にファイルシステムに保存されて以来、値やクラス構造が変更されている可能性はありますか?これが問題であるかどうかは、派生データ/キャッシュのクリーニングによってわかります。 – ColinMasters
'bookmarks' NSArrayをそのままNSKeyedArchiverに渡します。私はそのコードで私の質問を更新しました。 –