問題タブ [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.

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

iphone - NSKeyedArchivers / NSKeyedUnarchivers を使用するとアプリがクラッシュする理由がわかりません

NSString タイトル、NSString テキスト、および NSDate creationDate を保持するカスタム 'Entry' オブジェクトを使用する、最初の iPhone 'Diary' アプリを開発しています。Entry オブジェクトの NSMutableArray をアーカイブし、後でビューが読み込まれたときにそれらを取得しようとすると、アプリがクラッシュします。NSKeyedArchivers を使用するサンプル コードと例をたくさん調べましたが、なぜそれが起こるのかまだわかりませんでした。エントリを保持する配列の初期化に問題があると推測していますが、わかりません...

これがコードです。私がずっと監視してきた何かを見つけることができるかもしれません...」

どうもありがとう。

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

iphone - ディープコピーの例に関する質問

Beginning iPhone 4の本では、作成者はこのコードを使用して、アルファベットの各文字の名前のNSArrayを持つNSDictionaryのディープコピーを作成するためのカテゴリを作成し、検索バー付きのインデックス付きテーブルの例を示しています。

誰かがforループロジックを説明できますか?どの値がどのセレクターに応答するか、そしてなぜそれが辞書に追加されるのかを確認するために彼が何をしようとしているのかわかりません。ありがとう。

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

iphone - カスタムサブオブジェクトを使用した NSCoding

別のカスタム オブジェクトへの参照を持つ 1 つの costum オブジェクトがあります。メソッド内の 1 つのカスタム オブジェクト内でカスタム オブジェクトをエンコードするにはどうすればよい- (void)encodeWithCoder:(NSCoder *)encoderですか?

name が文字列で、cObj が別のカスタム obj であるとしましょう。

- (void)encodeWithCoder:(NSCoder *)encoderこれは私の他のカスタムオブジェクトを呼び出しますか?

ありがとうございました。

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

uiview - Pluggable custom-view Nibs (Nib-in-a-Nib): メモリ リーク – なぜ?

カスタム ビューの現在のベスト プラクティスは次のとおりです。

  1. Nib でカスタム ビューを構築します。
  2. ビュー コントローラーで、Nib をプログラムで読み込み、読み込まれたオブジェクトの配列からカスタム ビューを取得します (これは UIView カテゴリ メソッドで行います+loadInstanceFromNib)。
  3. カスタム ビューをサブビューとして追加し、そのフレームを設定します。

私たちが実際に望んでいるのは、カスタム ビュー Nib をビュー コントローラー Nib 内に「埋め込む」ことです。それができない場合は、少なくともビュー コントローラー Nib 内にカスタム ビュー インスタンスを追加して配置したいと考えています (その内容は表示されません)。

次の解決策に非常に近づいています。

プログラムでカスタム ビューをインスタンス化する場合は-initWithFrame:、Nib からビューをロードし ( -initWithCoder:「ステップ 2」というラベルの付いた if-branch を呼び出して直接移動します)、フレームを設定し、保持カウントを 1 に設定する を使用します。

ただし、ビュー コントローラーの Nib 内でカスタム ビューをインスタンス化する場合、(確かにやや醜い) 静的loadNormally変数は最初はNO次のようになります。「ステップ 1」から開始します。の「通常の」if-ブランチをすぐに使用し-initWithCoder:ます。カスタム ビュー Nib からのロードは、-initWithCoder:今度はに戻ることを意味しloadNormally==YESます。つまり、Nib ロード メカニズムにその仕事をさせて、カスタム ビュー インスタンスを返します。

結果の要約:

  • 良い点:動作します!!! Interface Builder には「プラグ可能な」カスタム ビューがあります。
  • 悪い点:醜い静的変数… :-/
  • 醜い: カスタム ビューのインスタンスがリークされました! これは私があなたの助けが欲しいところです - 私は理由を理解していません. 何か案は?
0 投票する
0 に答える
283 参照

iphone - sharedURL を介してアーカイブされたデータを渡す

私は現在、似たようなアプリを 2 つ持っており、2 つのアプリ間でデータを共有する方法を検討していました。共有 URL とすべてを設定し、あるアプリから別のアプリに問題なくジャンプできます。URLを介してデータを渡そうとすると問題が発生します。私は両方のアプリに互いに同一のクラスを持っており、NSKeyedArchiver とデコーダーに依存して、それらのエンコードとデコード、およびそれらを文字列にエンコードして URL に渡します。

両側にアクセスできるので、アプリ 1 からアプリ 2 に渡されたデータは汚染されておらず、アプリ 1 がエンコードしたとおりに到着することがわかります。しかし、反対側のデータをデコードできないようです!

ここでエンコードします:

次に、次のようにデコードします。

不足しているカスタム クラスのエンコード/デコードは他にありますか? 私は自分のクラスに NSCoding を実装しています。

常にnullのように見えますか?

ありがとう!

エンコード後の出力を確認しましたが、そのままです

パーセントエスケープを追加した後

デコード部分に NSLogs を追加しましたが、同じです。私は困惑しています... [unArchiver finishdecoding]の置き忘れを修正した後。エラーが表示されるようになりました

0 投票する
0 に答える
327 参照

objective-c - NSNetService をエンコードするには?

私はこれら2つのivarを持つクラスを持っています:

最終的にこれを NSData オブジェクトにエンコードしたかったので、NSCoding を実装しました。

ただし、使用しようとするarchivedDataWithRootObjectとエラーが発生します。

-[NSNetService encodeWithCoder:]: 認識されないセレクターがインスタンス 0x100170c40 に送信されました

- キー入力の処理中に例外が検出されました。-[NSNetService encodeWithCoder:]: 認識されないセレクターがインスタンス 0x100170c40 に送信されました

- * -[NSKeyedArchiver dealloc]: 警告: -finishEncoding を呼び出さずに NSKeyedArchiver が割り当て解除されました。

NSNetServiceNSCoding を使用するにはどうすればよいですか?

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

objective-c - カスタム オブジェクトを Cocoa の .plist に書き込む

私は何かをブロックしていますが、それが大きすぎると確信しています。このようなカスタムオブジェクトがあります

そして実装

ご覧のとおり、NSCoding を実装しています (そうだと思いますが、NSObject は NSCoding に準拠していません)。今、テストのためにそのようなことをしようとすると

downloadArrayですNSMutableArray。私のplistの読み取り/書き込みは問題pathありません。これはアプリケーションサポートにあり、ログに記録するとplistパスが表示されます。

しかし、配列をplistに書き込まないだけです。

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

ios - Bluetooth接続を介してデコーダーがクラッシュする

Bluetooth経由で別のデバイスに送信したいオブジェクトがあります。Bluetooth接続を正常にセットアップし、エンコードされたNSStringを転送しました。ただし、アーカイブおよびエンコードツールを正しく使用してオブジェクトを送信する方法がわかりません。

以下に定義されているChatMessageというオブジェクトを送信したいと思います。以下に示すように、NSCodingデリゲートメソッドinitWithCoderおよびencodeWithCoderを実装します。

2番目のコードスニペットには、データを送受信するためのコード、つまり、デエンコーダーが呼び出される結果となるメソッドがあります。

デコードメソッドの最後の行でクラッシュし続けます。私は何が悪いのかを理解するのに苦労してきました。どんな助けでも大歓迎です!

私の見解では、PeerPickerDelegate関数のプロトコル。

0 投票する
0 に答える
365 参照

nsmanagedobject - NSManagedObject アイテムのサブクラスを UIPasteboard に追加する - 切り取り、コピー、貼り付け

アプリケーションにカット、コピー、ペーストを実装しようとしています。UIPasteboard に保存したい項目は、NSManagedObject のサブクラスです。

私はこの答えに従いましたが、関係をコピーする必要があるまでは素晴らしかったです。私はから始めましたself.entity.attributesByName.allKeys

その後追加self.entity.relationshipsByName.allKeys

その後、使用するだけになりましたself.entity.propertiesByName.allKeys

screenCDElementDictステートメントでアーカイブするとき
[archiver encodeObject:screenCDElementDict forKey: @"TheObject"];

次のようなエラーが表示されます。

-[MyNSManagesObjectRelation encodeWithCoder:]: unrecognized selector sent to instance 0x72db3d0

そのため、エンティティへの関係ポインタではなく、関係エンティティのコピーを作成しようとしているようです。

実際の関係エンティティ自体をコピーするのではなく、それへのポインタだけをコピーします。したがって、新しいアイテムを貼り付けると、新しい NSManagesObject が作成され、元の NSManagedObject から新しい NSManagedObject への参照エンティティに関連付けることができます。

すべての属性と関係を手動でコピーする全体的な理由は、encodeWithCoder とマネージド オブジェクトが適切に再生されないためのようです。

呼び出す必要があることに言及している回答でさえ、[super initWithEntity:insertIntoManagedObjectContext:]エンティティの関係へのポインターのコピーについては何も言及していません。

関係エンティティ NSManagedObject ごとにアーカイブを作成することもできますが、新しいマスターを作成するときは、既存の関係エンティティを参照するのではなく、新しい関係エンティティを作成することになります...

ありがとう、スコット<-