問題タブ [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.
iphone - NSCoding プロトコルに準拠するオブジェクトを永続化してロードする方法は?
NSCoding プロトコルに準拠し、すべてのエンコードとデコードを行うクラスを作成しました。
私のアプリでは、単にオブジェクトをそのクラスからデバイスに保持し、次にアプリを起動したときにそのオブジェクトをメモリにロードし直したいと考えています。
基本的には、ユーザー入力情報を保持する単なるクラスです。たとえば、ユーザーがテキストを書き始めた後、アプリを終了したとします。次回は、そのデータ オブジェクトをロードしたいと思います。
NSKeyedArchiver が必要だと思いますか? これに関する良いチュートリアルはありますか?それ、どうやったら出来るの?
iphone - ファイルが特定のクラスのNSCoding実装に準拠しているかどうかを判断する最も速い方法は何ですか?
与えられたもの:ファイルのディレクトリにアクセスするアプリケーション:いくつかのプレーンテキスト、特定のNSCoding実装に準拠するいくつかのバイナリファイル、そしておそらく他のバイナリファイルは単に処理方法を理解していません。
私がしたいこと:そのディレクトリ内のどのファイルが私のNSCodingクラスに準拠しているかを把握できるようにし、各ファイル全体をメモリにロードしてアーカイブ解除を試みるという単純なアプローチに頼る必要がないようにしたい各。
誰かがこの問題に対してエレガントなアプローチやパターンを持っていますか?
iphone - [iPhone]Objective C、NSCoding に準拠していないオブジェクト。それらをファイルに書き込む方法
NSObject のサブクラスである Objective c クラスを使用しています。このクラスは変更できません。このクラスのインスタンスを取得して後で元に戻すことができるファイルに書き込みたいと考えています。オブジェクトは NSCoding に準拠していません。
要約すると、NSKeyedArchiving encodeWithCoder などの NSCoding メソッドを使用せずに、後で取得できるファイルにクラスのインスタンスを保存する必要があります。
それらを使用すると、これが返されます... NSInvalidArgumentException ...encodeWithCoder:] 認識されないセレクターがインスタンスに送信されました...
後で使用するためにこのオブジェクトを保存できる他の方法はありますか ありがとうございます
psクラスはUIEventです
objective-c - NSCoding と ostream
/NSKeyedArchive を使用するよりも ObjC オブジェクトをシリアル化する良い方法はありますか?
別のコンピューターに配置するには、C++ std:ostream のようなオブジェクトを介してオブジェクトを配布する必要があります。
オブジェクトには、さまざまなタイプの 122 を超えるメンバーが含まれています...
それらすべてのために...
少なくともそれを書き出す素敵な Perl スクリプトを持っている人はいますか? 含まれているオブジェクトが実装されているかどうかさえわかりません。つまり、オブジェクトのソースを変更できないため、これは巨大な醜い混乱に変わる可能性があります-継承して追加する必要が@interface
あります...
それとも私は愚かですか? XML へのアーカイブは ostream をうまく通過しないため、 Apple のガイドは役に立ちません。
これを行うより良い方法はありますか?
-S!
[編集 1]
NSCoding を調べたところ、私のクラスにはジェネリックが含まれており、NSManagedObjects
準拠していません<NSCoding>
。[ここ][2] にあるアスペクト指向プログラミングを使用してみましたが、実行時に無限再帰が発生します。(少なくとも、104795回のコールのコールスタックがそうであると私が想定しているの[id encodeWithCoder:]
は.
<NSCoding>
さらに、そのメンバーはインポートされたフレームワークのオブジェクトであるため、ロード中にクラスに追加することはできません。プロトコルを単純に追加することはできません。そのため、アスペクト指向のものが機能すると考えました。
私が持っている最後の (そしてひどい) アイデアは、必要なすべてのクラスをサブクラス化し、そこにプロトコルを実装することです。私が予測できる大きな障害は、フレームワークで公開されていないクラスの NSArray がクラスに含まれている場合です。それから私は沈んでいます。
これを行うより良い方法はありますか?設計時の決定のように感じますが、この機能を追加するには遅すぎます。
ヘルプ...
PS
リンクを制限するこのスパム対策全体が最悪です。どうすれば知的な質問ができるの!?
[2]: http://davedelong.com/blog/2009/04/13/aspect-directional-programming-objective-c#comment-803
iphone - カスタム オブジェクトの NSMutableArray を保存する
NSMutableArray のラッパーとして使用されるカスタム クラスがあります。
上記の配列は、別のカスタム クラスのオブジェクトを格納します。
以下のメソッドを使用して、Course オブジェクトを AllCourses に追加します
AllCourses に arrClasses MutableArray を保存して、アプリがロードされたときに、ユーザーが既に入力した保存済みデータを保持して入力できるようにする最良の方法は何ですか?
iphone - 私はこれを行うことができますか?? オブジェクトをそれ自体からロードしようとしています
NSCoding プロトコルに準拠するオブジェクトがあります。
オブジェクトには、次のように、それ自体をメモリに保存するメソッドが含まれています。
これはうまくいきます。しかし、このオブジェクトの空のバージョンを初期化してから、独自の「Load」メソッドを呼び出して、ファイルに存在するデータをその変数にロードしたいと思います。というわけで以下を作成しました。
この 2 番目の方法では、変数をロードできません。この行はおそらく不可能ですか?
最終的には、次のようなコードを使用したいと思います。
1 つの viewController は、ユーザーが入力した入力を受け取り、オブジェクトを作成し、次を使用してメモリに保存します。
そして、2 番目の viewController は空のオブジェクトを作成し、次を呼び出して、その値をファイルに保存されている値に初期化します。
この作業を行う方法についての提案は、非常に高く評価されます。ありがとう :)
マイケル
iphone - iPhoneNavigationControllerスタックのNSCodingシリアル化
編集:私は助けになった何かを見つけたようです。ivarの「スタック」を保持しましたが、現在は機能しているようです
私は問題なくいくつかのカスタムNSObjectクラスをシリアル化しています。次に、NavigationControllerスタックをシリアル化します。各viewControllerは、ナビゲーションツリーを再構築するために保存されたいくつかのプロパティのみを必要とします。私はviewControllersにNSCodingプロトコルを実装し、それらをNSDataに正常にコーディングして、ディスクに保存しました。
スタックを読み込もうとすると、結果の配列には正しい数のオブジェクトが含まれますが、viewController配列を設定しようとすると、EXC_BAD_ACCESSエラーが発生し続けます。私はこれを間違った方法で行っているのですか?
}
objective-c - NSCoderを使用して1つの大きなオブジェクトまたはいくつかの小さなオブジェクトをアーカイブする方が良いですか?
いくつかの異なるタイプのオブジェクトの配列をアーカイブする必要があります。各オブジェクトには独自のインスタンス変数があります。
最大20個のアーカイブオブジェクトを保持する配列を使用してシングルトンオブジェクトを作成する方がよいでしょうか、それとも他のすべてのオブジェクトの配列を含む単一のアーカイブオブジェクトを作成する方がよいでしょうか。それが混乱している場合は申し訳ありませんが、私は少し混乱しています。
iphone - すでに存在するクラスからカスタムクラスを作成するにはどうすればよいですか?(既存のクラスはNSCodingをサポートしていません)
私がやろうとしているのは、をに変換しEKEvent
てNSData
から、に変換して戻すことEKEvent
です。
周りを見回して、を使用するNSKeyedArchiver
には、クラスがNSCoding
プロトコルに準拠している必要があることに気付きました。NSCoding
また、カスタムクラスを作成する場合、そのようなカスタムクラスに実装することで、プロトコルに準拠させることができることもわかりましたencodeWithCoder:
。
基本的に、自分を変換EKEvent
したりNSData
、元に戻したりするには、カスタムクラスを作成する必要があると思います(これを呼び出しますCustomEvent
)。次のことを行う必要があります。
encodeWithCoder:
準拠させるために実装する例外を除いて、既存のクラスを複製するカスタムクラスを作成する方法を学ぶのに助けを得ることができますNSCoding
か?
私はEKEvent.hを見ていますが、他のクラスも複製する必要があることを知っています(それらも準拠していないためNSCoding
)。誰かが私にチュートリアルリンクを送ったり、私を助けたりできますか?
前もって感謝します!
iphone - NSKeyedUnarchiver でのデコードの問題
XCode 3.2.3 で iOS 4.0 を対象としたアプリを作成しています。このアプリでは、NSCoder プロトコルを使用してアプリを閉じるときにデータを保存します。保存はうまくいっているようですが、問題は保存されたファイルからデータを取得することです。私の保存方法は次のようになります。
そして、ファイルから読み取る方法は次のとおりです。
奇妙なことに、メモリからデータを読み取ってデバッグすると、mwData と fwData が実際には nil ではなく、互いにほぼ正しいサイズの比率 (約 2:1) になっていることがわかります。問題は、デコードされた配列 (tempMusicalWorks および tempFeaturedWorks) のエントリがゼロであることです (nil ではありません)。これは、問題は実際にはデコードにあると私に信じさせます。
念のため、アイテムが saveMusicalWorksToMemory() メソッドに保存されていることも確認しました。このメソッドを介して渡す配列には、実際にデータが取り込まれています。また、エンコードおよびデコードされるオブジェクトに対して initWithCoder() および encodeWithCoder() メソッドを適切に実装していることを確認しました。
ヒントはありますか?私はこれで本当に迷っています。
ありがとう!
-マット