問題のオブジェクトは、@propertyというキー/値のペアで構成されています。このオブジェクトを辞書にエンコード/デコードするエレガントな方法はありますか?手作業で各属性を取り出して手作業で辞書を作成するのは無理なようだ。サポートオブジェクトを辞書にエンコード/デコードする最もエレガントな方法
答えて
は、それは絶対に辞書である必要がありますか。 NSKeyedArchiver
は、実際にはNSDictionary
ではなく、記憶されたメモ付きの動作を提供し、プロパティリストのシリアル化が自動的にサポートしない多くのオブジェクトをアーカイブできるという特典が追加されています。 CocoaDev wikiにはusing archivers and unarchiversの良い説明があります。
のObjective-Cの「辞書などのオブジェクトは、」伝わってくる:
NSArray *myAttributes; // Assume this exists
NSDictionary *dictRepresentation = [object dictionaryWithValuesForKeys:myAttributes];
Hmmは[object attributeKeys]です。 http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/attributeKeys iphoneでは利用できませんか? –
そうは思わない。とにかくOS Xでの使用は疑わしいです。クラスを正しく動作させるためには、具体的に記述する必要があります。 Key-Valueコーディングでは、オブジェクトをある程度ディクショナリとして扱うことができますが、Object == Dictionary等価はPythonやJavascriptほど強力ではありません。 – Chuck
Objective-Cランタイム関数を使用してオブジェクトのプロパティを動的に取得することで、部分的にハックすることができますが、ほとんどの場合、それは努力する価値がありません。 – Chuck
あなたが望むキーはにObjC-2.0問題のクラスのプロパティは、次のような何かを行うことができます場合:
// Assume MyClass exists
unsigned int count = 0;
objc_property_t *properties = class_copyPropertyList([myClassInstance class], &count);
NSMutableDictionary *propertiesDict = [NSMutableDictionary dictionary];
unsigned int i;
for(i = 0; i < count; ++i) {
NSString *propertyName = [NSString stringWithCString:property_getName(properties[i]) encoding:NSASCIIStringEncoding];
id propertyValue = [self valueForKey:propertyName];
if(propertyValue)
[propertiesDict setObject:propertyValue forKey:propertyName];
}
free(properties), properties = NULL;
// Do something with propertiesDict
これは、単純なクラス拡張である可能性があります。
- 1. 最もエレガントな方法は、
- 2. JSONオブジェクトを作成する最もエレガントな方法
- 3. netifaces辞書にアクセスするエレガントな方法
- 4. 文字列の配列を文字列の辞書に変換する最もエレガントな方法
- 5. C#の辞書を照会するエレガントな方法
- 6. Facebookカンバスアプリケーションが最もエレガントな方法
- 7. 管理オブジェクトをiPhoneのコントロールと同期させる最もエレガントな方法は?
- 8. Pythonで永遠に辞書を保存するためのエレガントな方法は?
- 9. sessionStorageのサポートを確認する最もエレガントな方法は?
- 10. Pythonでクラスを設定する最もエレガントな方法は?
- 11. ラインをクリップする最もエレガントな方法は?
- 12. もっとエレガントな方法
- 13. もっとエレガントな方法
- 14. Whayは、ハッシュを裏返す最もエレガントな方法ですか?
- 15. JQuery $ .each内から値を返す最もエレガントな方法は?
- 16. 辞書に特定のキーを付け加える最も平凡な方法
- 17. シングル/複数形を扱う最もエレガントな方法は?
- 18. 不明なタイプの辞書にオブジェクトをキャストする方法
- 19. MPIにstd :: stringをブロードキャストする最もエレガントな方法は何ですか?
- 20. 辞書でアルファベットをCで保存する最も簡単な方法#
- 21. 最もエレガントな方法は、JavaScriptのポップアップを作成するには?
- 22. 同時に2つのプロパティを取得する最もエレガントな方法
- 23. 辞書の辞書をタブファイルに変換する最良の方法
- 24. 重複したエントリに対処するための最もエレガントな方法
- 25. JavaマップをC#で辞書に変換する最も良い方法
- 26. JavaScriptでネームスペース/クラス型構造を作成する最もエレガントな方法
- 27. この多態性の問題を回避する最もエレガントな方法
- 28. 辞書の結果を達成する最適なピジョンソニック方法
- 29. 一連のオブジェクトをリストにロードするエレガントな方法
- 30. 辞書<文字列、オブジェクト>最善の方法は、この辞書を変換する何
は辞書である必要はなく、優れた点があります。 nskeyedarchiverの優れた例が見つかりませんでした - あなたはブログやスニペットをリンクできますか? –
私が追加したcocoadevリンク、またはHillegass(3rd ed)のMac OS X用Cocoa Programmingの第10章を参照してください。 –