問題タブ [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 - NSPropertyListXMLFormat_v1_0 形式で NSKeyedArchiver を使用してオブジェクトをファイルにシリアル化するにはどうすればよいですか?
うまくいけば、そのタイトルは十分に明確です。とにかく、次のようです。
に制限されていNSPropertyListBinaryFormat_v1_0
ます。
人間が読める形式にする必要があります [so xml]。興味があれば、これはプロジェクトの一部であり、最終的に「GPS アプリケーションの単体テスト方法」に関するブログ投稿を github に掲載します。
:-)
iphone - NSKeyedArchiver からシングルトンの状態をロードする
シングルトンにしたクラスがあり、NSKeyedArchiver を使用してその状態を保存できますが、その状態を引き戻すことに頭を悩ませることはできません。
私が持っている読み込みを行う関数で
このコードでは、decodeObjectForKey は何を返しますか? 実際には Venue の別のインスタンスになることはできず、保存された値のいずれにも読み込まれていません。シングルトンの保存と読み込みに変換する前は、正常に機能していました。
cocoa - アーカイブおよびアンアーカイブの結果、不正なアクセスが発生する
モデル オブジェクトをセットアップして、ユーザーが生成した CALayers のビジュアル状態を iPhone 用の単純なグラフィック アプリケーションに保存するのに問題があります。
現在のすべてのレイヤーの背景色とフレームを画面に保存しようとしています。これらのプロパティを NSCoding プロトコルを実装するモデル オブジェクトに渡し、次にアプリ デリゲートが所有する NSMutableArray に渡します。次に、NSKeyedArchiver を使用して配列をアーカイブし、NSUserDefaults に保存します。
各 CALayer の backgroundColor プロパティは UIColor に変換され、モデル オブジェクトによってエンコードされて格納されます。配列のアーカイブを正しく解除していないか、アーカイブされていない配列から状態を正しく復元していないと思います。モデル オブジェクトに格納されている UIColor オブジェクトにアクセスしようとすると、EXC_BAD_ACCESS が返されます。
おそらくUIColorオブジェクトのエンコードのバグだと思ったので、CGColorGetComponents関数でCGColorRefから値を取り出して配列に格納してエンコードしてアーカイブしようとしましたが、アーカイブ解除後のアクセス不良の結果は同じだったので、私は私はそれを間違っているだけです。
これは私のモデルオブジェクトです:
そして、これは私のアーカイブの実装です:
そして、ここで状態を復元します。
これに関するヘルプは大歓迎です。私はほとんど初心者です。色のフロートから変換された NSNumbers の NSArray をほぼ同じ方法でエンコード、アーカイブ、およびアンアーカイブしていて、アクセスが悪くなりました。
iphone - 永続的なキー付きアーカイブのバージョン管理?
現在のアプリでは、NSKeyedArchiverアプローチを使用して、起動間でオブジェクトをiPhoneに永続化しています。このファイルをバージョン番号で作成するときにタグ付けして、将来アプリが回転するときに、移行が必要な場合に処理するデータの種類がわかるようにするのが理にかなっているのではないかと思います。これは、NSKeyedArchiverでシリアル化されたカスタムオブジェクトのNSArrayのような単純なものに推奨されますか?もしそうなら、どのように/どこにバージョン番号を隠しますか?
ありがとう!
iphone - IPhone - NSKeyedUnarchiver のメモリ リーク
NSKeyedUnarchiver unarchiveObjectWithFile:
アプリケーションデータを読み込むために使用しています。インストルメントでリークを使用して実行すると、次のようにするとリークが発生すると言われます。
この線:
applicationConfig = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
32 バイトのメモリ リークが発生しています。applicationConfig はインスタンス変数です。私のinitWithCode関数は単純に次のことを行います:
理由の任意のアイデア
applicationConfig = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
リークを生成していますか?
iphone - iPhoneで暗号化を使用せずにSQLiteデータを保護するアーカイバ
SQLiteデータストアとリソースバンドル内の多くの画像でCoreDataを使用するiphoneアプリを開発しています。SQLiteデータベースのファイル構造と画像ファイルを難読化して、カジュアルなハッカーや悪意のある開発者がそれらにアクセスできないようにする「簡単な」方法が必要です。アプリがデプロイされると、データベースファイルと画像ファイルが難読化されます。アプリを起動すると、データベースファイルを読み込んで難読化を解除し、難読化されていないバージョンをユーザーの「tmp」ディレクトリに書き込んでコアデータで使用し、必要に応じて画像ファイルを読み取り/難読化解除します。
簡単なアルゴリズムをファイルに適用して、ファイルデータをスクランブル/操作して、データベースをテキストエディターで開いたときにsqliteデータベースデータが認識されないようにし、他のアプリケーションでどちらも認識されないようにします( SQLite Manager、Photoshopなど)
私が読んだ情報から、これを達成するためにNSFileManager、NSKeyedArchiver、およびNSDataを使用できるようですが、どのように進めるかはわかりません。長年ソフトウェアを開発してきましたが、CocoaTouch、Mac、iPhoneのすべてに慣れていません。また、私のデータを保護/暗号化する必要がなかったので、これは新しいことです。
考え、提案、または解決策へのリンクをいただければ幸いです。
iphone - キーが長くなると、NSKeyedArchiverファイルが大幅に長くなります
iPhoneアプリのForObjectiveCencodeWithCoder:
クラスに入力すると、すべての変数に短いキーではなく長いキーを使用すると、アーカイブファイルが大きくなりますか?
たとえば、次のような非常に長いキーを使用する場合:
次のようなものを使用する場合よりもアーカイブファイルが長くなりますか?
私が多数のintとBOOLを持っていると仮定します。
iphone - iPhoneアプリがファイルを失う
私はiPhoneアプリを書いています–いくつかのソーシャルネットワークのクライアントです。アプリは複数のアカウントをサポートしています。アカウントに関する情報は、キー付きアーカイブに保存されます。
保存に使用される方法:
読み取りに使用するメソッド:
このメソッドsaveAccounts
は、一部のアカウントが追加/変更/削除された場合にのみ使用されます。このメソッドloadAccounts
は、アプリが起動するたびに使用されます。このファイルにアクセスする他のコードはありません。
私と私のテスターの1人が問題を抱えています。ある瞬間、のように振る舞い始めるのaccounts.bin
が欠けています。loadAccounts
が返された場合nil
、アプリはアカウントの追加を提案します。アカウントを入力した後(アプリは呼び出す必要がありますsaveAccounts
)、アプリは正常に動作しますが、再度起動すると、アカウントを再度追加するように求められます。唯一の解決策は、アプリをiPhoneに再インストールすることです。再インストールした後は、問題が発生してもしばらくは機能します。
私たち(問題が発生した私と私のテスター)は、3.1.2でiPhone3Gを使用しています。3.1.2を搭載したiPhone3GSでこの問題が発生しなかった別のテスター。
このファイルが消える理由はありますか?
アップデート
コードにバグが見つかりました。ドキュメントディレクトリ全体を削除するコードがありました。コードのこの部分はリモートサーバーに関連しているため、このコードを追跡することは困難でした。バグは非常にまれな条件下でのみ発生しました。
これでバグが見つかり、コードが修正されました。wkwの答えは私の問題を解決しませんでしたが、それは私にもっと深く掘り下げることを余儀なくさせました。ありがとうございました!
iphone - NSKeyedArchiverを使用して保存されたNSMutableArray内のNSDictionaryから文字列を読み取る際の問題
一連のNSDictionariesを使用して一部のデータを保存し、NSMutableArrayに保存し、NSKeyedArchiverを使用してアーカイブします。
基本的に、クラス「Brick」のいくつかのインスタンスの状態を保存しようとしているので、このようなgetBlueprintメソッドを実装しました(スリム化バージョン)
そのため、ブループリントが提供されたときに新しいBrickインスタンスを作成する別のメソッドがあります。
これは、「新しい」ブループリントを渡すと機能しますが、保存されたファイルからブループリントを読み取ると機能しません...ある種。たとえば、回転は機能しますが、色を変更しても機能しません。だから私はbrickColorの値を使用して読むことができますが
私が次のようなことをしようとすると
そして、私は色が紫であることを知っています、条件は真に戻りません。どういうわけかNSKeyedUnarchiverが文字列を別のものに変更したのではないかと思いましたが、次のテストはtrueを返します。
私が言ったように、ブループリントがアーカイブされてから読み戻された場合にのみ、新しく作成されたNSDictionaryをブループリントとして使用しようとしても、これは問題ではありません。
だから、いつものように、なぜこれが起こっているのか誰かが何か考えを持っているのだろうかと思います。
関連する場合は、次のようにデータを保存および受信します。
質問の混乱について申し訳ありません。自分自身を完全に理解するのに苦労していることがたくさんあるので、それを最小限に分解するのは難しいです。
cocoa - NSKeyedArchiverのアーカイブを確実に開いて編集することは可能ですか?
以下のコードのようなものを使用して、オブジェクトのNSDictionaryをデバイスに保存しています。このアーカイブを開き、アーカイブに含まれているディクショナリアイテムにドリルダウンして、理想的にはデータを編集する方法はありますか?保存時に最適化を行うとアーカイブの解釈が難しくなるため、私の推測ではありません。少なくとも、プロパティリストエディタなどで開くと、そのように表示されます。たとえば、私のオブジェクトのいくつかが同様のNSStringを共有している場合、そのNSStringは一度だけアーカイブされるように見えます...NSDictionaryの構造を私が期待していたものから変更します。