問題タブ [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.
objective-c - 同期されたNSKeyedArchiverまたはNSUserDefaults
さまざまな要因(ネットワークの到達可能性、近接性など)が原因で完了できないiphoneからアプリサーバーへのトランザクションのエンキューとデキューを担当するシングルトン遅延トランザクションマネージャークラスがあります。到達可能性/近接性が復元されると、トランザクションのデキューが試行されます。デキューが行われているのと同時に、別のトランザクションがエンキューされる可能性もあります。
私の理解では、NSUserDefaultsは、変更可能なディクショナリSOリンクのスレッドセーフラッパーであり、まさに私が望んでいるものです。その同じSOリンクは、NSUserDefaultsがユーザー設定用であると考えています。
これらのトランザクションはユーザー設定ではありませんが、それが私が望む機能です。だから、ここに質問があります、辞書を壊すことなくNSUserDefaultsのトランザクションのNSMutableDictionaryを読み取り/書き込み/同期できますか、またはNSKeyed(Un)Archiver(以下を参照)で読み取りと書き込みを行う独自のロックメカニズムを実装する必要がありますか?
いくつかのコード:
デキュー:
ios - カスタムオブジェクトを使用した NSKeyedUnarchiver
NSKeyedUnarchiver、NSMutableArray、および自己作成クラスについて質問があります。データは NSKeyedArchiver によってユーザーのデフォルトに保存されます。ユーザーのデフォルトにデータが読み込まれると、データ ストリームのコンソールに出力されます。データを配列にアンパックしたいのですが、配列は空になります。配列または配列のロードを保存する方法を知っている人がいるかもしれません。
ありがとうございました。
こんにちは、シューミ
objective-c - NSKeyedArchiver .plist の追加の問題
**
- フォームから配列にデータを取得し、NSKeyedArchiver を使用してその配列を .plist ファイルに書き込もうとしています。
- 書き込みは成功しますが、スクリプトを実行するたびに以前のデータに上書きされます。
- 上書きする代わりに、新しいデータを .plist ファイルに追加するにはどうすればよいですか?
**
—</p>
iphone - NSKeyedArchiever iPhone を使用してエンコードされた .data ファイルを読み取る方法
NSKeyedArchiver を使用して、iPhone アプリのデータを .data にアーカイブします。簡単に言えば、すべてのデータを失いました。「iPhone バックアップ エクストラクター」を使用していますが、うまく機能します。アプリの .data ファイルが見つかりました。
明確にするために、.data ファイルを見つけたので、それを開いて内容を確認します。そのファイルを読み取ることができるソフトウェア (例: メモ帳) はなく、Xcode を使用する必要があるかもしれないことを理解しています。Xcode/notepad/someProgram の方法を知っている場合は、お知らせください。
これは、アプリをビルドするときに実装するコードです。
このコードは、applicationWillTerminate、applicationDidEnterBackground などの間に呼び出されます...
データは次のように didFinishLaunchingWithOptions で復元/呼び出されます。
どんな助けでも大歓迎です!ありがとう!!!
PS: iPhone バックアップ エクストラクターのリンクはhttp://supercrazyawsome.com/です。
ios - NSMutableArrayは、NSKeyedArchiverを使用してアプリを強制終了または再起動すると表示されなくなります
Task
内にオブジェクト(カスタムクラス)を格納しているアプリがありNSMutableArray
ます。Task
クラスはとプロトコルに準拠しておりNSCoding
、とメソッドNSCopying
も実装しました。encodeWithCoder
initWithCoder
ユーザーがに新しいタスクを追加するとき、を使用NSMutableArray
list
して配列を保存しNSKeyedArchiver
ます。list
を設定しますUITableView
。
データは保存されており、アプリを終了して再入力しても、データはまだそこにあります。別のアプリをしばらく使って戻ってきても、データは残っています。ただし、マルチタスクタスクでアプリを「強制終了」すると、デバイスを管理または再起動すると、データが消えます。重要なコードスニペットは次のとおりです。
。
アプリが「強制終了」されたとき、またはデバイスが再起動されたときに、アプリがデータを保存しないのはなぜですか?また、iPhoneシミュレーターを再起動しても、データはそのまま残っていることに注意してください。
objective-c - NSKeyedUnarchiverのNSMutableDataの制限
NSMutableArrayに250kバイトを超えて保存することはできないという別の投稿(アーカイブ/アーカイブ解除の結果はinitForReadingWithDataの理解できないアーカイブになります)を読みました。残念ながら、NSKeyedUnarchiverを使用してこのようなデータを回復するには、NSMutableArrayを使用する必要があります。500kB前後のサイズの画像を取り戻そうとしています。
私が得るエラーは次のとおりです:
キャッチされなかった例外'NSInvalidArgumentException'が原因でアプリを終了しています、理由:'***-[NSKeyedUnarchiver initForReadingWithData:]:理解できないアーカイブ(0x0、0x10、0x4a、0x46、0x49、0x46、0x0、0x1) '
どうやらそれはかなり一般的な状況です(私はまだ解決策を見つけていませんが)。NSMutableDataの使用をバイパスする方法について何か考えがありますか。ありがとうございました。
編集:実際には、データのサイズは524 288バイトであると書かれていますが、これは正しいので、問題はアンアーカイバーに起因する可能性があります。
ios - iOS: アーカイブへの追加
NSKeyArchiver を使用してアーカイブにデータを追加するメモリ効率の良い方法を推奨できる人はいますか?
オブジェクトを収集し、メモリ内キャッシュとしてアプリで使用できるようにする配列があります。ますます多くのメモリを消費するのを避けるために、(個別のキャッシュ ファイルを作成するのではなく) 単一のキャッシュ ファイルを保持して、この配列をファイルに頻繁にアーカイブしたいと考えています。
これを行う 1 つの方法は、既存の配列内の項目を追加するよりも、既存のファイルを tempArray に展開することです。
[tempArray addObjectsFromArray:array];
次に、配列をアーカイブします。
[NSKeyedArchiver archiveRootObject:tempArray toFile:file];
このアプローチは、新しいデータをアーカイブする前にアーカイブ全体をメモリに読み込む必要があるため、本来の目的よりも優先されます。
誰でもよりエレガントなソリューションを推奨できますか?
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 で:
objective-c - NSKeyedUnarchiverdecodeObjectForKeyを使用してNSArrayをデコードするときのメモリリーク
メソッドのどこかで発生する巨大なメモリリークを修正しようとしています。これは、CoreDataデータストアからNSDataオブジェクトを取得し、そのNSDataをNSArrayにアーカイブ解除します。
myArrayを解放すると(自動解放されたオブジェクトであるため、実行すべきではありません)、メモリリークはなくなります。
この問題を解決する方法を知っている人はいますか?CustomObjectのNSArrayの項目は、NSDictionaryオブジェクトです。
前もって感謝します
編集:-(CustomObject *)getCustomObjectは非常に頻繁に呼び出されるため、このリークの影響は非常に大きくなります。