如何引用Objective-C类属性?

时间:2015-03-04 18:42:01

标签: ios objective-c reference

我正在开发一个包含大量字段视图的应用程序。我一直在操纵它们,因为我不知道如何引用类属性以便能够动态保存它们。

现在我有很多代码来操作单个字段...例如:

self.rowField.delegate = self;

NSArray *collectionNames = @[@"personTypeCategories", @"personTypes", @"genders", @"rows", @"seats", @"seatingOthers", @"restraintSystems", @"helmetUses"];

if ([collectionName isEqualToString:@"personTypeCategories"]) {
    [self loadDefaultForCollection:@"personTypeCategories" toField:self.personTypeCategoryField withKey:@"PersonTypeCategoryID" defaultValue:self.editingPerson.typeCategoryKey];
}

if (textField == self.rowField) {
    [self showCollection:@"rows" withIDColumn:@"RowID" withField:textField];
    return NO;
} 

当我有一个新字段遵循我们的保存信息标准并稍后将其发布到服务器时,我需要为每个字段创建这些行,现在我想通过创建这样的数组动态地执行它:

- (void)loadViewConfiguration {
    self.viewElements = [[NSMutableArray alloc] init];

    [self.viewElements addObject:@{
        @"restMethod" : @"personTypeCategories",
        @"key" : @"PersonTypeCategoryID",
        @"field" : self.personTypeCategoryField,
        @"enabled" : @YES,
        @"modelAttr" : &self.editingPerson.typeCategoryKey
    }];
}

问题出在modelAttr中,我需要具有该类属性引用,以便以后去修改或获取它。

另一种选择可能是我可以像在PHP中那样动态调用类属性,例如:

$attr = "name";
$editingPerson->{$attr} = "Omar";

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不知道你可以为此目的使用键值编码。

为了实现这一点,我所做的只是保存属性的名称,然后使用以下方法获取值:

[classInstance valueForKey:elem[@"modelAttr"]];

这方面的一个例子:

for (NSDictionary *elem in self.viewElements) {
       if ([collectionName isEqualToString:elem[@"restMethod"]]) {
                [self loadDefaultForCollection:elem[@"restMethod"] toField:elem[@"field"] withKey:elem[@"key"] defaultValue:[self.editingPerson valueForKey:elem[@"modelAttr"]]];
       }
}

感谢@matt的建议