問題タブ [nscoding]
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 - NSCode:プリミティブ型のエンコーダーとデコーダー
モデルクラス用の汎用エンコーダーとデコーダーを作成しようとしていました。オブジェクト(NSString、NSNumber、NSArrayなど)とプリミティブ型のいずれかのすべてのタイプのプロパティに対して「encodeメソッド」を呼び出す方法を見つけようとしていました。そして、私は誰かが次のことをしているのを見ました。そして、私はこれがそれを行う正しい方法であるかどうか疑問に思いました。
プロパティ:
エンコンダーおよびデコーダーコード:
これが正しい方法であるかどうか、または他のプログラムやオブジェクトがプリミティブプロパティの同じメモリ空間に書き込むことができるかどうかはわかりませんでした。上記の方法が正しい場合、上記とこれの違いは何ですか?
私が正しいと思った方法:
テストしたところ、両方のメソッドが正しい値を返しました。
ios - NSCodingVSコアデータ
私は、NSCoding(NSKeyedArchiver ...)の長所とCoreData(SQLite ....)の使用に対する短所を説明する記事を探していました。
多くのオプションがあります。独自のカスタムバイナリリーダー/ライターを実装するか、plists / xml / json ...を使用するか、SQLiteまたはNSCodingを使用できます。
私は今ちょっと迷っています。主な機能の違いを説明できる人はいますか?
objective-c - iOS 4 と iOS 5 の MKPlacemark と NSCoder
iOS 4 では、 にMKPlacemark
準拠していませんNSCoding
。
iOS 5 では、経由でMKPlacemark
準拠しています。NSCoding
CLPlacemark
自分のキー/値 (アドレス帳以外)を使用-initWithCoordinate:addressDictionary:
して問題を解決できるかどうかはわかりませんが、本当に気になるのはNSCoding
.
特に、サブクラス化したとしましょうMKPlacemark
。をサポートしたい場合はNSCoding
、準拠している限り、スーパークラスを呼び出したいと思います。
興味深いのは、これ-conformsToProtocol:
がYES
iOS 5とiOS 4 で復活したことです!
iOS 4 では、スーパークラスが応答するかどうかを確認しても-encodeWithCoder:
(プロトコルを確認したいのですが、どうでもいいです)、問題ありません。「ああ、あのセレクターに適合して対応するって言ったっけ?ああ!うん。いいえ。」(カブラモ。)
ここで OS のバージョンを確認したくありませんが、両方の場合に戻るとしたらYES
... (身震い)。
iphone - NSCoding、NSData、UIImagesおよびパフォーマンス
NSCodingを使用して、いくつかの異なるフィールド(そのうちの1つは画像)を持つカスタムオブジェクトを管理しています。iOS 5.0以降のみを対象としており、ARCに切り替えました。私はすべてが機能していますが、パフォーマンスに重点を置いています。このような質問は見たことがないので、次のようにします。
UIImageをNSDataに変換し、それをメインのNSCodingファイル(重要な場合はplist)に追加して、ディスクに保存します。複数の画像がある場合、画像名は順番になります(たとえば、image1、image2、image3)。次に、UITableView(サイズ変更されたサムネイルとして)と詳細ビューの両方で画像を使用します。これのマイナス面は、plistのサイズが膨らむことです。これは、すべてのNSDataを一度にロードするため、使用すると初期ロード時間が遅くなることを意味します。
この問題を解消し、一度に1つの画像のみを強制的にロードするための最良の方法は何ですか?
私が考えたこと:
NSDataをディスクに書き込み、配列をplistに追加し、各イメージのファイル名への参照のみを配列に追加します。次に、指定された位置にある画像のファイル名を参照し、ディスク上で見つけて使用すると思いますか?
ありとあらゆる考えが大歓迎です。私は他の何よりも概念的な実装に固執しており、おかしなことに、これは頻繁に議論されるトピックではありません。
ありがとう、
編集:
以下でリクエストされているように、画像を取得してNSDataに変換する例を次に示します。
iphone - UIImages (およびその他) の NSArray を含む NSDictionary を含む NSArray を保存する
ここで NSArrays/NSDictionaries の保存に関するさまざまな質問を見てきましたが、サブ要素の一部が UIImages である場合の対処法について少し混乱しています。
少し状況を説明すると、このアプリは基本的にブログ タイプのアプリです。ユーザーが新しいエントリを作成している場合、投稿には次の内容を含めることができます。
- フォト アルバムから最大 3 枚の画像
- 文章
- 位置
要するに、ユーザーがブログ投稿を一時的にキャンセルすることを決定した場合に、「下書きを保存」機能をアプリに実装しようとしています。ユーザーがブログ投稿をキャンセルすると、下書きを保存するかどうかを UIActionSheet で尋ねられます。ユーザーが再度投稿したい場合は、保存した下書きで中断したところから始めることができます。
この時点で、次のオブジェクトを保存する必要があります。
「下書き保存」機能を有効にするために上記1~4のデータを保存する必要があるのですが、どのように保存すればよいでしょうか? このすべてのデータを保持する特別なクラスを作成する必要がありますか? また、UIImages をディスクに保存する前に、まず UIImages を NSData にする必要がありますか?
ありがとうございました!!
ios - ARCを使用したCGMutablePathRefのエンコードとデコード
ARCでは、 ?を使用してCGMutablePathRef
(またはその非可変形式)をエンコード/デコードすることは可能NSCoding
ですか?素朴に私は試します:
しかし、コンパイラからわかりやすいエラーが発生します。
これをエンコードするにはどうすればよいですか?
ios - NSCoder + UIDocument: 互換性はありますか?
これはおそらく素朴な質問ですが、私が望むUIDocument
ことをしない場合に時間を無駄にしないように再確認したいと思います。
背景:ユーザーが作成したドキュメントを として保存するための単純なファイル システムを作成したアプリがありますplists
。エンコード/デコードがすべて機能しています。私はいくつかのプリミティブ型を使用しており、適切なエンコーダー メソッドでそれを処理しています。Library
命名システムがあり、ユーザーが直接アクセスしてはならないドキュメントであるため、plist をディレクトリ内のカスタム ディレクトリに保存します。(必要に応じて、データをドキュメント ディレクトリにエクスポートできます。
私は「自動保存」について考え始め、それから発見しましたUIDocument
- かなり素晴らしいですね。
上記を考えると、私は使用できるようUIDocument
ですか?保存したのは、NSObject から派生したカスタム クラスの "Project" インスタンスです。これには、カスタム クラス、NSDictionaries などのインスタンスを含む一連の NSMutable 配列が含まれています。 -part-1しかし、自分のデータなどのために機能しないことを発見したくありません.
アップデート:(家で一緒に読んでいる人のために... ;-)これでいくらか進歩しました。
UIDocument では (間違っています - 以下の回答を参照) を使用しますが、エンコード方法の名前は同じであるため、既に持っていたものを簡単に調整できました。すべてのデータをキャプチャしているように見える plist を保存できましたが、すべてを読み戻そうとするまでわかりません。整理していないエラーが発生します。NSKeyedArchiver
なくNSCoder
NSFileCoordinator: 驚くべきサーバー エラーが通知されました。詳細: 接続が無効です
ローカルに保存しているので、iCloudに接続しようとしている理由がまったくわからないので、それほど驚くことではありません。うまくいけば、私はそれをオフにすることができます。
objective-c - NSCoding を実装するオブジェクトをサブクラス化するときに [super encodeWithCoder] を呼び出す必要がありますか?
NSCoding を実装するオブジェクトのサブクラスの initWithCoder メソッドを記述する場合、initWithCoder
( の代わりにsuper init
) super を呼び出す必要があることはわかっていますがsuper encodeWithCoder
、encodeWithCoder の実装で呼び出す必要がありますか?
iphone - appDelegate.m で applicationWillTerminate を実装する方法
NSCoding メソッドを使用する MyPos.h という名前のクラスにデータを保存しようとしています。
(void)encodeWithCoder:(NSCoder *)aCoder
(id)initWithCoder:(NSCoder *)aDecoder
これら 2 つのメソッドは MyPos.m ファイルに実装されています。
ここで、アプリケーションが終了したときにデータを保存し、起動が完了したときにデータをロードするようにします。to メソッドを AppDelegate.m ファイルに実装したいのですが、データを保持する MyPos クラスのインスタンスを保存する方法がわかりません。
これは、AppDelegate.m ファイル内の 2 つのメソッドのうちの 1 つです ... これまでのところ:
どうすればこれを解決できますか? よろしくお願いします。
objective-c - Cocoa - NSCoding はどこに保存しますか?
NSCoding プロトコルのデフォルトの保存場所は?
また、そのようなデフォルトの場所、つまり.appファイルが配置されているフォルダーを変更する方法はありますか?