問題タブ [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.
iphone - NSKeyedUnarchiver は自動解放しますか?
プロパティ リストのアーカイブを行っていますが、NSKeyedUnarchiver を使用してデータをアーカイブ解除すると、後でオブジェクトを解放するとアプリがクラッシュすることがわかりました。finishDecoding メッセージもオブジェクトを自動解放するかどうか疑問に思っていました。リリースするとクラッシュするのは奇妙に思えます。
iphone-sdk-3.0 - ゲーム ステート シングルトン cocos2d、initWithEncoder は常に null を返す
cocos2d で基本的なテスト「ゲーム状態」シングルトンを作成しようとしていますが、アプリのロード時に何らかの理由で initWithCoder が呼び出されません。どんな助けでも大歓迎です、ありがとう。
ここに私のシングルトン GameState.h があります:
... そして GameState.m:
...次のように、アプリの終了時に状態を保存しています:
...そして、次のように、アプリの読み込みが終了したときに状態を読み込みます。
メインの CCScene など、loadState を呼び出す場所も移動しようとしましたが、うまくいかないようでした。
よろしくお願いします。
iphone - NSKeyedArchiver と NSValue - アーカイブする方法は?
NSValues の配列をアーカイブするにはどうすればよいですか? これを行うには、どのような変換を行う必要がありますか? そのままではアーカイブされません。
コード:
エラー:
配列データ:
)
iphone - 複数のオブジェクトをアーカイブ解除しようとすると、NSKeyedUnarchiver がチョークする
カスタム マトリックス クラスがあり、そのうちの 4 つを含む NSArray をアーカイブおよびアーカイブ解除しようとしています。最初のものは正常に解凍されたように見えますが (initWithCoder が 1 回呼び出されていることがわかります)、その後、プログラムは 100% の CPU を使用して単にハングします。続行しないか、エラーを出力しません。これらは、matrix クラスの関連するメソッドです (rows、columns、matrix は唯一のインスタンス変数です)。
}
p>そして、これが実際に私たちがやろうとしているすべてです:
p>一度に 1 つずつ (NSArray ではなく)、それぞれ別のファイルにアーカイブしようとしましたが、まだ 2 番目のファイルにハングアップしています。
私たちを夢中にさせているのは、1 つのマトリックスを問題なくアーカイブおよびアンアーカイブできることです。これら 4 つを合わせた数倍の行列を使用して (成功裏に) 実行しました。
iphone - NSArray の NSKeyedArchiver には大きなサイズのオーバーヘッドがあります
iPhoneアプリケーション用のデータを生成するMac OS XプログラムでNSKeyedArchiverを使用しています。デフォルトでは、結果のアーカイブが予想よりもはるかに大きいことがわかりました。例:
これは 10 * 100000 = 1M バイトの有用なデータを格納しますが、結果のファイルのサイズはほぼ 3 メガバイトになります。オーバーヘッドは、配列内のアイテムの数とともに増加しているようです。この場合、1000 アイテムの場合、ファイルは約 22k でした。
"file" は、それが "Apple バイナリ プロパティ リスト" (XML 形式ではない) であることを報告します。
この巨大なオーバーヘッドを防ぐ簡単な方法はありますか? NSKeyedArchiver が提供する単純さのために、それを使用したかったのです。データを独自の非汎用のバイナリ形式に書き込むことはできますが、それはあまりエレガントではありません。また、データを大きなチャンクに集約し、これらを NSKeyedArchiver にフィードすることは機能するはずですが、繰り返しますが、単純で簡単ですぐに使用できるアーカイバーを使用するという点に勝っています。このオーバーヘッドを削減するメソッド呼び出しまたは使用パターンが欠落していませんか?
iphone - NSKeyedUnarchiver-不正なアクセス
オブジェクトをplistファイルにアーカイブし、後でそれをロードしてtableViewを埋めようとしていました。ファイルは正しくアーカイブされているようですが、ファイルから値を取得しようとするとアクセスが悪くなります。
私は何か間違ったことをしていますか?
これは私がそれを保存する場所です
そしてここで私はそれをファイルから取り出して配列に戻そうとします
セルを作ろうとする部分
ここで不正アクセスエラー
現在の言語:自動; 現在objective-cアサーションに失敗しました:(cls)、関数getName、ファイル/SourceCache/objc4_Sim/objc4-427.5/runtime/objc-runtime-new.mm、3990行目。アサーションに失敗しました:(cls)、関数getName、ファイル/ SourceCache /objc4_Sim/objc4-427.5/runtime/objc-runtime-new.mm、3990行目。アサーションに失敗しました:(cls)、関数getName、ファイル/SourceCache/objc4_Sim/objc4-427.5/runtime/objc-runtime-new.mm、 3990行目。アサーションに失敗しました:(cls)、関数getName、ファイル/SourceCache/objc4_Sim/objc4-427.5/runtime/objc-runtime-new.mm、3990行目。
objective-c - NSMutableArrayとファイルへの保存
Shop
データメンバーを含むというクラスがあります( NSString
、NSInteger
およびNSMutableArray
別のクラスを含みます(ともありますNSString
)NSInteger
。sのリストを保持するため
に使用する場合、リストをファイルに保存して後でロードするための最良の方法は何ですか? ?
この場合も、クラスには別のクラスであるデータメンバーが含まれています。両方のクラスにと(おそらくと)があります。NSMutableArray
Shop
Shop
NSString
NSInteger
NSData
NSDate
私は何かについて聞いたarchiver
??
ありがとう。
iphone - iPhoneでの高速(逆)シリアル化
私はiPhoneOS用のゲーム/エンジンを開発しています。Objective-Cを使用するのは初めてです。
ジオメトリデータとPVRTCに焦点を当てているテクスチャ用に独自のバイナリ形式を作成しました。速度とスペースに関する限り、これが最適なアプローチになるはずです。読み込み時間を最小限に抑え、可能であれば、非常に高速に節約できるようにしたいと考えています。
だから今、私はパフォーマンスを犠牲にすることなく私の「エンティティ」のものを永続的にしようとしています。
まず、NSKeyedArchiverを使用したかった。私が聞いたところによると、それほど速くはありません。また、私がシリアル化したいのは、ほとんどの場合、いくつかのintと文字列を含むfloatで作成された構造体であるため、すべての「オブジェクトグラフ」オーバーヘッドは実際には必要ありません。
NSArchiverの方が適切だったでしょうが、彼らは何らかの理由でそれをiPhoneから始めました。
だから今、私は自分自身のシリアル化スキームをもう一度作ることを考えています。NSKeyedArchiverが遅いと思うのは間違っていますか(私はそれを読んだだけで、自分でテストしていません)?もしそうなら、速度を犠牲にすることなく構造体(ポインタなし、ほとんどがフロート)をエンコード/デコードするための最良の方法は何ですか?
objective-c - 私の音はどこに行きましたか?
私のRowクラスには、initWithCoderメソッドがあり、そのメソッドで復元されたものはすべて正常に機能しますが、メソッド内でのみ機能します。メソッドが呼び出された後、Rowクラスにあるサウンドの配列を失います。サウンドクラスにもinitWithCoderメソッドがあり、サウンドは正常に再生されますが、RowクラスのinitWithCoderメソッドでのみ再生されます。Rowオブジェクトをデコードすると、サウンド配列が完全に消え、呼び出すことができなくなります。
initWithCoderのソースは次のとおりです。
ログには、カウントが8と表示されます(これはアーカイブ解除中です)。次に、作成した行オブジェクトが割り当てられます。そして、結果の行オブジェクトには、soundArrayがなくなります。
そのため、soundArrayを呼び出すとクラッシュします。
助けてください(soundArrayはNSMutableArrayです)。
objective-c - アーカイブされていないオブジェクトはどうなりますか?
NSKeyedUnarchiver でオブジェクトをアーカイブ解除した後、通常どおり使用できますが、再アーカイブできません。しようとすると、クラッシュします。
Apple の開発者リソースを調べてみましたが、NSKeyedArchiver の適切な使用法についての完全な説明は見当たりませんでした。助けてください。
私の知る限り、それは私のサウンドクラスかもしれません。あなたがこれをチェックしている間、私はそれをチェックします。
ただし、調査の結果、次のことがわかりました。
サブクラスによってオーバーライドされ、キー付きアーカイブ中にそれ自体を別のオブジェクトに置き換えます。
- (id)replacementObjectForKeyedArchiver:(NSKeyedArchiver *)アーカイバー
パラメータ archiver アーカイブを作成するキー付きアーカイバ。戻り値 レシーバーの代わりにエンコードされるオブジェクト (異なる場合)。
解説 このメソッドは、エンコーダーでオブジェクトの置換マッピングが設定されていない場合にのみ呼び出されます (たとえば、そのオブジェクトへの replacementObjectForKeyedArchive: の以前の呼び出しが原因で)。