プロパティの型を取得するためにランタイム関数を使用しています (この方法を理解するのを手伝ってくれた eJames に感謝します)。プロパティの属性文字列は次のようになります。
T@"NSArray",&,Vstuff
プロパティの型が配列かどうかを確認する必要があります。現時点では、次のようにしています。
- (BOOL)valueForKeyIsArray:(NSString *)key fromTagret:(id)target
{
NSString *lowerCaseKey = [self convertToKVCKey:key];
objc_property_t property = class_getProperty([target class], [lowerCaseKey UTF8String]);
NSString *propertyAttrs = [NSString stringWithUTF8String:property_getAttributes(property)];
NSString *encodedType = @"@\"NSArray\"";
NSRange range = [propertyAttrs rangeOfString:encodedType options:NSLiteralSearch];
return range.location != NSNotFound;
}
しかし、Apple はいつでも型定義文字列を変更できるので、この @"NSArray" 型文字列を生成したいと思います。@encode() で試してみましたが、うまくいきませんでした:
NSString *encodedType = [NSString stringWithUTF8String:@encode(NSArray *)];
では、この型文字列を生成するにはどうすればよいでしょうか? または、このプロパティ属性に配列型が含まれているかどうかを確認するより良い方法はありますか?