問題タブ [nscoder]

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

objective-c - NSCoderバイナリファイル形式にはどのファイル拡張子を適用する必要がありますか?

とを使用するNSCoderNSKeyedArchiver、データがバイナリ形式で保存されることを理解しています。したがって、ストレージファイルに最も適切なファイル拡張子は何ですか?多くのチュートリアルでは.plistを使用していますが、これはテキストプロパティリスト〜キー/値のペアである必要があると思います。

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

objective-c - NSCoder対応クラスの簡単なやり方

オフラインで使用するために保存したいオブジェクトがたくさんあります。現在、オブジェクトとコード化されたデータをオフラインで使用できるように、NSCoder 準拠のクラスを作成しています。

したがって、.h でオブジェクトを紹介します。

そして、.m で init を作成します。

したがって、クラスは getter と setter を使用した単なるダミー ストレージです。デコード/エンコードを行うためのより良い方法はここにあります。エンコードとデコードに @dynamic または Key-value コーディングを使用できますか? 基本的に、クラス内のすべての変数をファイルに保存し、プログラムの起動時にオブジェクトに戻す必要があります。このアプローチは機能しますが、すべてのクラスを作成するには時間と労力がかかります。

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

objective-c - initWithCoder: での NSCoder の使用は何ですか? (ココアとココアタッチ)

ここでの NSCoder の役割は何ですか?

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

ios - サブビューを使用したUIImageViewのアーカイブ解除

UIImageViewから派生したカスタムビューであるサブビューの数を含むUIImageViewをアーカイブおよびアーカイブ解除しようとすると、少し頭がおかしくなります。これが私がしたことです:

UIImageがNSCodingに準拠していないという事実を考慮して、プロジェクトにカテゴリを追加します。

アーカイブしているUIImageViewは、「background」と呼ばれるメインのViewControllerのプロパティです。私はそれをこのように保存します:

その後、次のようにアーカイブを解除します。

次に、サブビュー(または少なくともそのうちの1つ!)をアーカイブされていないルートオブジェクトと一緒に表示したいと思います。

これは、ORUImageViewサブクラスに追加したものです。

imageプロパティのエンコーディングを使用して、または使用せずにこれを試しました。

アーカイブされていないビューにサブビューが明らかに追加されているので、問題はこのプロパティに関連していると思われます-それは表示されないだけです!imageプロパティが設定されていないように感じますが、自分で設定する方法が見つからず、正しい方法を教えてくれるものも見つかりません。

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

objective-c - NSCoder-ネストされた配列の複数のレベルで配列をエンコードする

カスタムクラスのインスタンスが設定されたmainObjectArray(NSMutableArray)があります。各インスタンスはそれ自体が配列であり、各配列のオブジェクトはNSDates、NSStrings、BOOL、および同様のオブジェクトを含むその他の配列です。

私が確立できなかったのは、内部でそれが可能かどうかです

メソッド、そのようなことを言うには:

または、すべてのインスタンスのすべてのオブジェクトを個別にエンコードする必要がありますか?これは少し苦痛でしょう...

あなたの助けをいただければ幸いです。

0 投票する
3 に答える
2101 参照

objective-c - 列挙中にコレクションが変更されました-データをアーカイブし、NSCoder を使用してファイルに書き込みます

私のアプリでは、一連の動的データを定期的にファイルに書き込んでいます。データ オブジェクトは約 1 秒ごとに更新されます。時折、encodeWithCoder: メソッドの行の 1 つで、「変異中にコレクションが変異しました」という例外が発生します。各オブジェクトは次のようにエンコードされます。

self.speeds は NSMutableArray です。問題は、エンコード中にデータが更新されていることだと思います。エンコーディングブロック保存ブロックで @synchronize を使用してみました。また、プロパティを非アトミックではなくアトミックにしようとしましたが、どちらも機能しませんでした。保存バックグラウンドで行われています。更新中にこのデータをバックグラウンドで保存する方法のアイデアはありますか? コピーを作成して保存すればうまくいくような気がしますが、同じ問題は発生しませんか? ありがとう!


編集1:

アプリのアイデアは、マップ ビューを開くことです。マップ ビューは、データ オブジェクトの配列を含むシングルトン クラスを定期的に更新します。各データ オブジェクトはユーザーのマップ情報です。各データ オブジェクトには、ユーザーの位置、速度、高度、距離などがあります。ロケーション マネージャーがユーザーの位置を 3 回更新するたびに、現在のデータ オブジェクト (この旅行を追跡するために作成されたばかりの「ライブ」データ オブジェクト) を更新します。新しい情報を持つ「ライブ」データ オブジェクトは常に 1 つだけ存在できます。

シングルトン全体をx分ごとにファイルに書き込みたいのですが、書き込みと更新が同時に発生し、このエラーが発生することがあります (または、少なくともそれがこのクラッシュの原因であると想定しています)。私のコードまたは私のデザインパターンに問題がありますか?


これは、私のカスタム クラスのエンコーディング メソッドです。

これは update メソッドです (メソッドにはさらに多くのコードがあり、update メソッドで呼び出される他のメソッドもありますが、「ライブ」dataObjectオブジェクトを参照しないものはすべて省略しています。つまり、更新されるオブジェクトです)。

最後に、クラスのsynchronizeメソッド(トミーの回答に従って、同期が非同期ブロック内で発生するように更新されました):SingletonDataController

backgroundQueue は次のように作成されます。

必要に応じてさらにコードを投稿できますが、それらは重要な部分のようです。

0 投票する
3 に答える
97 参照

ios - データ保存に必要な意見

配列を保存する必要があるアプリを作成しています。テスト目的で、現在プロパティ リスト ファイルを使用しています。長期データを保存する他の方法を検討していました。コアデータと NSCoder は有望なようです。

私は非常に単純なデータ、ほとんどが配列を保存しています

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

ios - initWithCoder: NSCoder (UINibDecoder) のキーは何ですか? (UIImageView用)

具体的には、画像パスを見つけようとしています。これは非常に便利なものです。私が見つけた限りでは、誰もその方法を知りません。キー用に生成された nib ファイルを調べたところ、そこに画像の URL (test.jpg) が表示されていますが、それを取得するためのキーが見つかりません。キー "UIImage" は、実際に既に構築されたイメージ (上記の init 呼び出しを呼び出すinitWithCGImageStored:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation神秘的な UIKit 関数呼び出しGetImageAtPathを介して構築されたもの) を返すため、これは役に立ちません。

また、NSKeyedArchiver を使用して UIImageView をディスクに書き込もうとしましたが、これらの値のいずれも正しいようには見えず、そこに test.jpg 値も存在しません。

誰もこれを理解できない場合-バイナリファイルをテキストとして読み取る方法を知っている人はいますか? nib を読み込んで URL を解析するだけで済みます。これは何もないよりはましですが、NSString のコンストラクターは、どの形式を試しても失敗します。

0 投票する
3 に答える
1239 参照

objective-c - 自動参照カウントで自己を解放するための新しいパターンは何ですか?

-(id)awakeAfterUsingCoder:(NSCoder *)decoder例としてNSObject メソッドを使用すると、ドキュメントには次のように記載されています。

オブジェクトがデコードされた後、それ自体を別のオブジェクトに置き換えることを許可します。たとえば、フォントを表すオブジェクトは、デコード時にそれ自体を解放し、それ自体と同じフォント記述を持つ既存のオブジェクトを返す場合があります。このようにして、冗長なオブジェクトを削除できます。

通常、あなたはそうするでしょう

ARC では、この行を除外する必要があります。これは漏れませんか?それとも、NSCoder オブジェクトを信頼して元のオブジェクトを解放する必要がありますか? もしそうなら、そもそもARC以外のコードで自分自身を明示的に解放しなければならないのはなぜですか?

self = nilコンパイラのドキュメントが自己について述べていることを考えると、正しいとは思いません: http://clang.llvm.org/docs/AutomaticReferenceCounting.html#misc.self