問題タブ [nskeyedunarchiver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
214 参照

objective-c - ファイルをドキュメント フォルダにアーカイブおよびアーカイブ解除できません

このコードではエラーは発生しませんが、「plist」ファイルを作成したり、ファイルから読み取ったりしていません。

フォルダーへの直接パスを指定するコードを作成し、ファイルから読み取ることはできませんが、ファイルを作成して書き込みます。

以下のこのコードは、ファイルの書き込みも読み取りもできませんでした。

そして、オンラインの指示に従って一行ずつたどりました。

Employee.h正確なファイルをコピーしましたEmployee.mが、そこにもエラーはありませんでした。

ご協力ありがとうございました。

以下NSLogが表示されます。

しかし、ファイルは作成されません。

0 投票する
2 に答える
261 参照

objective-c - カスタムクラスのアーカイブ解除時の NSInvalidUnarchiveOperationException

編集:QCAnnonce* a = [[QCAnnonce alloc] init];関数呼び出しの前のどこかに In my code を追加することで問題を解決したので、「クラスをランタイムに導入した」と思います。しかし、「a」が使用されていないという警告が表示されたので、「クラスをランタイムに導入する」ために使用できるランタイム関数はありますか?

クライアント サーバー アプリケーションを作成しようとしています。オブジェクトは、NSKeyed(Un)Archiver を使用して転送のためにアーカイブおよびアーカイブ解除されます。ほとんどのオブジェクトは問題なく送信されますが、そのうちの 1 つが NSInvalidUnarchiveOperationException を発生させます。

例外は、initWithCoder: に配置したブレークポイントの前に呼び出されます。

送信する前にアーカイブ/アーカイブ解除を試みましたが、これはうまく機能するため、initWithCoder では問題になりません。

サーバーアプリでクライアントを作成しようとしましたが(クライアントとは別のアプリではありません)、彼はオブジェクトをデコードできます。私のクライアントとこの新しいクライアントの間に違いはありませんが、それらは同じアプリにありません。

私が持っている最良の推測は、アップルドキュメントのこの部分です:

たとえば、デリゲートは、クラスをランタイムに導入してクラスを返すコードをロードしたり、別のクラス オブジェクトに置き換えたりする場合があります。デリゲートが nil を返す場合、アーカイブ解除は中止され、メソッドは NSInvalidUnarchiveOperationException を発生させます。

しかし、「ランタイムにクラスを導入する」が何を意味するのかわかりません。

エンコード/デコード用のオブジェクト メソッドは次のとおりです。

例外メッセージは次のとおりです。

0 投票する
1 に答える
328 参照

ios - NSKeyedUnarchiver SKSpriteNode が表示されない

保存した状態から復元しているときに、SKSpriteNode がビューに表示されません。

保存および復元プロセス中にエラーや警告は発生しません。

このコードを使用してプレーヤー クラスを保存しています。

私のプレーヤークラスには、次のエンコーダー/デコーダーがあります。

次に、次のコードでプレーヤーを復元します。

問題は、復元後にプレイヤー スプライトが表示されないことです。ただし、画面をタップすると、プレイヤーはジャンプ (ビューが上下に移動)、剣を振り (効果音あり)、ミサイルを発射 (ミサイルが表示されて移動) します。3 つのアクションはすべてプレイヤー クラスから開始されます。プレイヤースプライトが見えません。

編集:ビデオを追加しました

プレーヤー クラスの初期化のビデオ。

保存された状態からプレーヤー クラスを復元​​するビデオ:

0 投票する
1 に答える
366 参照

objective-c - NSKeyedUnarchiver unarchiveObjectWithFile decodeBytesForKey EXC_BAD_ACCESS code=1 データ取得時

NSKeyedUnarchiver unarchiveObjectWithFile を使用して、decodeBytesForKey について少し助けが必要です。すべてを正しく書き込んでいるように見えますが、データを読み取ると EXC_BAD_ACCESS エラーが発生します。データを逆シリアル化しようとしていますが、さまざまな回答や例に混乱しています。誰かが私が間違っていることを指摘できますか?

データのエンコーダーとデコーダーの行をコメントアウトすると、他のすべての正しい値が返されますが、データも必要です。

0 投票する
1 に答える
274 参照

ios - カスタム NSObject iniWithCoder が呼び出されない

LevelContentいくつかのプロパティを含むカスタム オブジェクトがあります。LevelContentに準拠し、およびメソッドNSCodingを実装しました。データを保存して Parse.com にフェッチします。保存は次のようにうまくいきます: encodeWithCoder:initWithCoder:

データをフェッチすると、NSData正しく取得されますLevelContentが、ダウンロードしたデータで初期化しようとすると、initWithCoder:呼び出されません。私はこれをロードしようとしますLevelContent:

エンコード/デコードのコードは次のとおりです

0 投票する
2 に答える
1172 参照

ios - NSKeyedArchiver がデータを永続化しない

したがって、私のアプリは Amazon Dynamo DB データベースにクエリを実行し、数キロバイト相当のデータを取得します。私がアプリに実行させたいのは、最初にすべてをダウンロードし、その後は毎回タイムスタンプをダウンロードして、最新バージョンのデータがあるかどうかを確認することです。たまにデータをダウンロードするだけで済むように、NSKeyedArchiver を使用して、ダウンロードしているアレイをアーカイブしようとしています。私はこの 3 つの異なる方法を試しましたが、いずれも iPhone では機能しませんが、そのうちの 2 つはシミュレーターで機能します。

これは、シミュレーターでも実際の iPhone でも機能しません。このメソッドの結果は NO です。

次に使用したのはフルパスです。

これはシミュレーターでは機能しましたが、iPhone では機能しませんでした。私の推測では、コンパイルすると、ファイルシステムが異なって見えます (そして、明らかに同じパスはありません)。次に、私は試しました:

繰り返しますが、これはシミュレーターでは機能しますが、iPhone では失敗します。アーカイブへの書き込み前にすべてのデータが self.dataArray にあることを確認し、アーカイブへの書き込み後に配列が nil であることを確認しました (iphone 版)。何が起こっているのですか?ファイルパスを行うためのより良い方法はありますか?