私はproperty
として、カスタムNSDictionary
の別のセットのNSArray
を持っているカスタムオブジェクトを持っています。配列をエンコードしてデコードすると、値が必要なオブジェクトは空になります。私が読んだことは、オブジェクトがNSCoding
に準拠していると言いますが、NSArray
内のオブジェクトを正しくエンコードするために何か必要があるように感じます...何が欠けていますか? NSDictionaryのサブクラスするカスタムオブジェクトの配列を持つカスタムオブジェクトをエンコード/デコードするにはどうすればよいですか?
0
A
答えて
1
@interface Trough : NSDictionary <NSMutableCopying, NSCoding>
@property int col;
@property int row;
@property BOOL isLocked;
@property NSMutableArray *tokens;
- (void)encodeWithCoder:(NSCoder *)encoder {
// encoding properties
[encoder encodeInteger:col forKey:@"col"];
[encoder encodeInteger:row forKey:@"row"];
[encoder encodeBool:isLocked forKey:@"isLocked"];
[encoder encodeObject:tokens forKey:@"tokens"];
}
- (id)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self) {
col = (int)[coder decodeIntegerForKey:@"col"];
row = (int)[coder decodeIntegerForKey:@"row"];
isLocked = [coder decodeBoolForKey:@"isLocked"];
tokens = [coder decodeObjectForKey:@"tokens"];
}
return self;
}
非常に珍しい:
@interface Game : NSObject <NSMutableCopying, NSCoding>
@property int rows;
@property int cols;
@property NSMutableArray *troughs;
- (void)encodeWithCoder:(NSCoder *)encoder {
// encoding properties
[encoder encodeInteger:rows forKey:@"rows"];
[encoder encodeInteger:cols forKey:@"cols"];
[encoder encodeObject:troughs forKey:@"troughs"];
}
- (id)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self) {
rows = (int)[coder decodeIntegerForKey:@"rows"];
cols = (int)[coder decodeIntegerForKey:@"cols"];
troughs = [coder decodeObjectForKey:@"troughs"];
}
return self;
}
トラフのアレイは、として定義されたオブジェクトを含んでいます。これらのNSCopying実装が動作する可能性がある場合、継承された動作も呼び出す必要があります。
- (void)encodeWithCoder:(NSCoder *)aCoder {
[super encodeWithCoder:aCoder];
// encode your Trough properties
}
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
// decode your trough properties
}
return self;
}
+0
それは素晴らしいヒントでした!私は、TroughがNSDictionary型である必要はないことに気付きました。それをNSObjectに切り替えると、物事はうまくいっています。私はスーパーに電話してみませんでした。私はそのようなことをさまざまな時点で試みました。しかし、NSDictionaryのドキュメントでは、NSCodingに準拠しているとは言わないので、そうではないと仮定しました。とにかく、今はいいと思う。感謝!!! – Gwendyl
関連する問題
- 1. カスタムオブジェクトの配列を文字列の配列に変換するにはどうすればよいですか?
- 2. カスタムオブジェクトをLinQで合計するにはどうすればよいですか?
- 3. NSPredicateはカスタムオブジェクトの別の配列を含むカスタムオブジェクトの配列にあります
- 4. は、どのようにカスタムオブジェクト
- 5. ネストされた配列を持つカスタムオブジェクトのNSArrayを検索するにはどうすればよいですか?
- 6. ユーザーコントロールのListView列の表示メンバーをカスタムオブジェクトにバインドするにはどうすればよいですか?
- 7. アクティビティ間でカスタムオブジェクトの配列をどのように送信しますか?
- 8. jsonをカスタムオブジェクト配列に変換する
- 9. カスタムオブジェクトを検証する配列にプッシュ
- 10. NSTableDataSourceでカスタムオブジェクトを持つNSArray
- 11. カスタムオブジェクトの配列を返す方法は?
- 12. NSDictionariesとプロパティを持つカスタムオブジェクトの違いは何ですか?
- 13. iOS、Swift:再利用のためにロードできるようにカスタムオブジェクトを含む配列を保存するにはどうすればいいですか?
- 14. TypeScript - JSON配列をカスタムオブジェクトの配列にパースする方法
- 15. WCFを使用してカスタムオブジェクトのリストをシリアル化するにはどうすればよいですか?
- 16. カスタムオブジェクトの配列のフィルタリング
- 17. UWPアプリケーションのListView間でカスタムオブジェクトをドラッグアンドドロップするにはどうすればよいですか?
- 18. カスタムオブジェクトを使用してJavaFXでリストビューを作成するにはどうすればよいですか?
- 19. アプリが終了した後にカスタムオブジェクトのArrayListを保存するにはどうすればよいですか?
- 20. カスタムオブジェクトのAndroid保存配列
- 21. カスタムオブジェクトでlibgdx配列のコピーを作成するにはどうしたらいいですか?
- 22. C#でカスタムオブジェクト型クラスを作成するにはどうすればよいですか?
- 23. 汎用カスタムオブジェクトをUserDefaultsに保存するにはどうすればよいですか?
- 24. アンドロイドアプリケーションのアクティビティ間でカスタムオブジェクトのリンクリストを渡すにはどうすればよいですか?
- 25. カスタムオブジェクトをjQuery change()などに変更するにはどうすればいいですか?
- 26. アンドロイドにカスタムオブジェクト(ドロウアブルを含む)のリストを保存するにはどうすればいいですか?
- 27. Swiftでカスタムオブジェクトの配列を渡すには
- 28. カスタムオブジェクトをSwiftの配列に追加する方法は?
- 29. カスタムオブジェクトのSwift配列をテキストファイルに格納する方法は?
- 30. UIImageとNSMutableArrayを含むNSUserDefaultにカスタムオブジェクトを保存するにはどうすればいいですか?
なぜ 'Trough'は' NSObject'ではなく 'NSDictionary'のサブクラスですか? – rmaddy