[解決済み] Objective-Cでオブジェクトのプロパティリストを取得する
2022-10-22 21:02:25
質問
どうすればリスト(
NSArray
または
NSDictionary
) のようなオブジェクトのプロパティは、Objective-Cではどうなるのでしょうか?
次のシナリオを想像してください。
NSObject
を継承した親クラスを定義し、その親クラスが
NSString
, a
BOOL
と
NSData
オブジェクトをプロパティとして持っています。そして、この親クラスを拡張するいくつかのクラスがあり、それぞれ多くの異なるプロパティを追加しています。
のインスタンスメソッドを実装する方法はないでしょうか?
親
クラスのインスタンスメソッドを実装する方法はありますか?このメソッドはオブジェクト全体を通過して、例えば
NSArray
として、それぞれの (子) クラスのプロパティを
NSStrings
であることを
ではない
を親クラスで使用することで、後でこれらの
NSString
をKVCに使用できますか?
どのように解決するのですか?
私はちょうど自分自身で答えを得ることに成功しました。Obj-C ランタイム ライブラリを使用することで、私が望む方法でプロパティにアクセスすることができました。
- (void)myMethod {
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList([self class], &outCount);
for(i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
const char *propName = property_getName(property);
if(propName) {
const char *propType = getPropertyType(property);
NSString *propertyName = [NSString stringWithCString:propName
encoding:[NSString defaultCStringEncoding]];
NSString *propertyType = [NSString stringWithCString:propType
encoding:[NSString defaultCStringEncoding]];
...
}
}
free(properties);
}
これは主にAppleのコードサンプル(正確なソースは今思い出せません)から引用したものです。
static const char *getPropertyType(objc_property_t property) {
const char *attributes = property_getAttributes(property);
char buffer[1 + strlen(attributes)];
strcpy(buffer, attributes);
char *state = buffer, *attribute;
while ((attribute = strsep(&state, ",")) != NULL) {
if (attribute[0] == 'T') {
if (strlen(attribute) <= 4) {
break;
}
return (const char *)[[NSData dataWithBytes:(attribute + 3) length:strlen(attribute) - 4] bytes];
}
}
return "@";
}
関連
-
[解決済み] Objective-CでNSStringsを連結するためのショートカット集
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] JavaScriptでオブジェクトのキー/プロパティの数を効率的にカウントする方法
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] オブジェクトの現在のプロパティと値をすべて表示する組み込み関数はありますか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み】C#には拡張プロパティがある?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] error: Writeable atomic property cannot pair with synthesized setter/getter and the user defined setter/getter.
-
[解決済み] iOSの合成されたプロパティの名前を、先頭のアンダースコアで変更するのはなぜですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RootViewControllerのスイッチングアニメーション
-
[解決済み] NSPredicate: NSDateプロパティの日によるオブジェクトのフィルタリング
-
[解決済み] ARCを使用する場合、deallocでプロパティをnilに設定するのですか?
-
[解決済み] Objective-CでNSArrayを新しいNSArrayにフィルタリングする。
-
[解決済み] Objective-Cのセレクタ?
-
[解決済み] なぜObjective-Cはプライベートメソッドをサポートしないのですか?
-
[解決済み] NSURLをローカルファイルのパスに変換する
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] Objective-Cでオブジェクトをコピーする方法
-
[解決済み] Objective-CでQueueを作成し、使用するにはどうすればよいですか?