問題タブ [nskeyedarchiver]

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 に答える
1585 参照

objective-c - 同期されたNSKeyedArchiverまたはNSUserDefaults

さまざまな要因(ネットワークの到達可能性、近接性など)が原因で完了できないiphoneからアプリサーバーへのトランザクションのエンキューとデキューを担当するシングルトン遅延トランザクションマネージャークラスがあります。到達可能性/近接性が復元されると、トランザクションのデキューが試行されます。デキューが行われているのと同時に、別のトランザクションがエンキューされる可能性もあります。
私の理解では、NSUserDefaultsは、変更可能なディクショナリSOリンクのスレッドセーフラッパーであり、まさに私が望んでいるものです。その同じSOリンクは、NSUserDefaultsがユーザー設定用であると考えています。

これらのトランザクションはユーザー設定ではありませんが、それが私が望む機能です。だから、ここに質問があります、辞書を壊すことなくNSUserDefaultsのトランザクションのNSMutableDictionaryを読み取り/書き込み/同期できますか、またはNSKeyed(Un)Archiver(以下を参照)で読み取りと書き込みを行う独自のロックメカニズムを実装する必要がありますか?

いくつかのコード:

デキュー:

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

ios - カスタムオブジェクトを使用した NSKeyedUnarchiver

NSKeyedUnarchiver、NSMutableArray、および自己作成クラスについて質問があります。データは NSKeyedArchiver によってユーザーのデフォルトに保存されます。ユーザーのデフォルトにデータが読み込まれると、データ ストリームのコンソールに出力されます。データを配列にアンパックしたいのですが、配列は空になります。配列または配列のロードを保存する方法を知っている人がいるかもしれません。

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

こんにちは、シューミ

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

objective-c - NSKeyedArchiver .plist の追加の問題

**

  1. フォームから配列にデータを取得し、NSKeyedArchiver を使用してその配列を .plist ファイルに書き込もうとしています。
  2. 書き込みは成功しますが、スクリプトを実行するたびに以前のデータに上書きされます。
  3. 上書きする代わりに、新しいデータを .plist ファイルに追加するにはどうすればよいですか?

**

—</p>

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

iphone - NSKeyedArchiever iPhone を使用してエンコードされた .data ファイルを読み取る方法

NSKeyedArchiver を使用して、iPhone アプリのデータを .data にアーカイブします。簡単に言えば、すべてのデータを失いました。「iPhone バックアップ エクストラクター」を使用していますが、うまく機能します。アプリの .data ファイルが見つかりました。

明確にするために、.data ファイルを見つけたので、それを開いて内容を確認します。そのファイルを読み取ることができるソフトウェア (例: メモ帳) はなく、Xcode を使用する必要があるかもしれないことを理解しています。Xcode/notepad/someProgram の方法を知っている場合は、お知らせください。

これは、アプリをビルドするときに実装するコードです。

このコードは、applicationWillTerminate、applicationDidEnterBackground などの間に呼び出されます...

データは次のように didFinishLaunchingWithOptions で復元/呼び出されます。

どんな助けでも大歓迎です!ありがとう!!!

PS: iPhone バックアップ エクストラクターのリンクはhttp://supercrazyawsome.com/です。

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

ios - NSMutableArrayは、NSKeyedArchiverを使用してアプリを強制終了または再起動すると表示されなくなります

Task内にオブジェクト(カスタムクラス)を格納しているアプリがありNSMutableArrayます。Taskクラスはとプロトコルに準拠しておりNSCoding、とメソッドNSCopyingも実装しました。encodeWithCoderinitWithCoder

ユーザーがに新しいタスクを追加するとき、を使用NSMutableArray listして配列を保存しNSKeyedArchiverます。listを設定しますUITableView

データは保存されており、アプリを終了して再入力しても、データはまだそこにあります。別のアプリをしばらく使って戻ってきても、データは残っています。ただし、マルチタスクタスクでアプリを「強制終了」すると、デバイスを管理または再起動すると、データが消えます。重要なコードスニペットは次のとおりです。

アプリが「強制終了」されたとき、またはデバイスが再起動されたときに、アプリがデータを保存しないのはなぜですか?また、iPhoneシミュレーターを再起動しても、データはそのまま残っていることに注意してください。

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

objective-c - NSKeyedUnarchiverのNSMutableDataの制限

NSMutableArrayに250kバイトを超えて保存することはできないという別の投稿(アーカイブ/アーカイブ解除の結果はinitForReadingWithDataの理解できないアーカイブになります)を読みました。残念ながら、NSKeyedUnarchiverを使用してこのようなデータを回復するには、NSMutableArrayを使用する必要があります。500kB前後のサイズの画像を取り戻そうとしています。

私が得るエラーは次のとおりです:

キャッチされなかった例外'NSInvalidArgumentException'が原因でアプリを終了しています、理由:'***-[NSKeyedUnarchiver initForReadingWithData:]:理解できないアーカイブ(0x0、0x10、0x4a、0x46、0x49、0x46、0x0、0x1) '

どうやらそれはかなり一般的な状況です(私はまだ解決策を見つけていませんが)。NSMutableDataの使用をバイパスする方法について何か考えがありますか。ありがとうございました。

編集:実際には、データのサイズは524 288バイトであると書かれていますが、これは正しいので、問題はアンアーカイバーに起因する可能性があります。

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

ios - iOS: アーカイブへの追加

NSKeyArchiver を使用してアーカイブにデータを追加するメモリ効率の良い方法を推奨できる人はいますか?

オブジェクトを収集し、メモリ内キャッシュとしてアプリで使用できるようにする配列があります。ますます多くのメモリを消費するのを避けるために、(個別のキャッシュ ファイルを作成するのではなく) 単一のキャッシュ ファイルを保持して、この配列をファイルに頻繁にアーカイブしたいと考えています。

これを行う 1 つの方法は、既存の配列内の項目を追加するよりも、既存のファイルを tempArray に展開することです。

[tempArray addObjectsFromArray:array];

次に、配列をアーカイブします。

[NSKeyedArchiver archiveRootObject:tempArray toFile:file];

このアプローチは、新しいデータをアーカイブする前にアーカイブ全体をメモリに読み込む必要があるため、本来の目的よりも優先されます。

誰でもよりエレガントなソリューションを推奨できますか?

0 投票する
5 に答える
677 参照

iphone - アプリ デリゲートから別のビュー コントローラーにシングルトンが保持されない

このリンクをたどる: NSKeyedArchiever を使用して 2 つのオブジェクトをアーカイブするにはどうすればよいですか? 配列とシングルトン オブジェクトをアーカイブできます。didFinishLaunchingWithOptions でアーカイブおよび正しく展開できます。

ただし、私のシングルトン オブジェクトはアプリ デリゲートを超えて保持されません。次のビュー コントローラーでは、didFinishLaunchingWithOptions で NSLog を実行して検証したにもかかわらず、シングルトン変数がデフォルト値に戻ります。ここに例があります、

アプリケーションでdidFinishLaunchingWithOptions:

NSLog(@"singleton sorting after decode: %@", [singleton sort]);// 出力: アルファベット

次に、viewController を割り当て/初期化し、ナビゲーション コントローラーのルート ビュー コントローラーとして設定します。

viewController -> viewWillAppear で、

並べ替え関数を呼び出します: [self sort...];

ソート関数では、シングルトン クラスを呼び出します: Singleton*singleton = [Singleton sharedSingleton]; しかし、今、NSLog(@"singleton sort: %@", [singleton sort]);// 出力: 量 NOT アルファベット

Singleton コードを投稿できますが、動作することはわかっています。実際、ビュー コントローラーの設定で [singleton sort] 変数を変更すると、すべてのビュー コントローラーで永続化されます。

これは、私のシングルトン オブジェクトがアプリ デリゲートからビュー コントローラーに保持されない理由について、私を混乱させます。ヒント/ヒントをいただければ幸いです。

ありがとう!!!

編集: シングルトン クラスの実装

Singleton.m で:

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

objective-c - NSKeyedUnarchiverdecodeObjectForKeyを使用してNSArrayをデコードするときのメモリリーク

メソッドのどこかで発生する巨大なメモリリークを修正しようとしています。これは、CoreDataデータストアからNSDataオブジェクトを取得し、そのNSDataをNSArrayにアーカイブ解除します。

myArrayを解放すると(自動解放されたオブジェクトであるため、実行すべきではありません)、メモリリークはなくなります。

この問題を解決する方法を知っている人はいますか?CustomObjectのNSArrayの項目は、NSDictionaryオブジェクトです。

前もって感謝します

編集:-(CustomObject *)getCustomObjectは非常に頻繁に呼び出されるため、このリークの影響は非常に大きくなります。