Val*_*adu 6 iphone objective-c ipad
我使用以下代码迭代对象的所有属性.我成功地检索property name的char,但我不知道如何得到property value它的id类型.有关如何实现这一目标的任何想法?
objc_property_t *allProperties = class_copyPropertyList([currentObject class], &allPropertyCount);
for (unsigned int i = 0; i < allPropertyCount; i++) {
      objc_property_t property = allProperties[i];
      const char * propertyName = property_getName(property);
}
================================================== ======================================
编辑:谢谢大家的好评和答案.有些人问我为什么需要这个.嗯,原因如下:
我有几个同类的对象.让我们说这个类是Person,它的实例是玛丽,约翰和大卫.每个对象的属性设置如下:
mary.age = [NSNumber numberWithInt:20];
john.age = [NSNumber numberWithInt:45];
david.age = [NSNumber numberWithInt:20];
mary.gender = @"female";
john.gender = @"male";
david.gender = @"male";
我的目的是找到一种基于给定属性名称Eg对对象进行分组的通用方法.这将创建2组[大卫和玛丽]和[约翰]:
[self groupBaseDataObjects:self.persons withPropertyName:"age"];
还有这个:
[self groupBaseDataObjects:self.persons withPropertyName:"gender"]; 
还将创建2组[约翰和大卫]和[玛丽]
好的 - 似乎没有必要做任何时髦的运行时体操来解决你的问题(不要误解我 - 时髦的体操运动会很有趣......但这可能只是浪费时间在这里).
重申一下这个问题:
您有一个具有该类的许多实例的类(MyClass).该类提供了几个属性,该类的实例具有该属性的许多不同值.您有一组实例,并且您希望轻松获取多个子集的集合,其中每个子集中的对象对于特定属性具有相同的值.
为此,我只是循环原始问题并执行类似的操作(此代码从未见过编译器;它可能无法编译):
// implement this on MyClass
+ (NSDictionary*)subdivideArrayOfMyClass:(NSArray*) aCollection byAttribute:(NSString*) anAttribute
{
    NSMutableDictionary *collector = [NSMutableDictionary dictionary];
    for (MyClass *anObject in aCollection) {
        id value = [anObject valueForKey: anAttribute];
        // you'd have to special case for nil here if you wanted.
        NSMutableArray *sameValueCollector = [collector objectForKey: value];
        if (!sameValueCollector) {
             sameValueCollector = [NSMutableArray array];
             [collector setObject: sameValueCollector forKey:value];
        }
        [sameValueCollector addObject:anObject];
    }
    return collector; // no need to turn it into an immutable dict
}
这确实假设所有值都可以安全地用作字典中的键.对于你给出的例子,情况确实如此.
如果您需要具有单个值的所有对象,则可以在数组上执行valueForKey :. 如果你愿意,你可以做一些时髦的设置算法来细分对象.但是,这可能会在集合上产生多次传递,而上面的工作只需要一次传递(尽管收集器中可能存在大量的哈希查找).直截了当,直到性能分析表明它太慢.
| 归档时间: | 
 | 
| 查看次数: | 6656 次 | 
| 最近记录: |