是否可以为返回的指针分配新值?

时间:2013-12-31 01:11:37

标签: ios objective-c cocoa-touch

我有一个我正在创建的表单,为了简化操作,我正在尝试为对象创建表单字段映射器。因此,我创建了以下字典:

self.fieldPropertyMapper = @{
@(CompanyFieldName):self.company,
@(CompanyFieldDescription):self.company.description,
@(CompanyFieldWebsite):self.company.website,
@(CompanyFieldTwitter):self.company.twitter,
@(CompanyFieldAddress):self.company.address,
@(CompanyFieldAddress2):self.company.address2,
@(CompanyFieldCity):self.company.city,
@(CompanyFieldState):self.company.state,
@(CompanyFieldZipcode):self.company.zipcode,
@(CompanyFieldPhone):self.company.phone
};

此处的密钥是CompanyFieldType枚举的成员。

我的目标是稍后在我的表单中为返回的指针赋值。这就是我的意思:当我的某个表单中的文本字段停止编辑时,我正在设置该值。这就是我想要完成的事情:

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    CompanyFieldType fieldType = [self fieldTypeForTag:textField.tag];
    // Set the value of the respective company property 
    // In theory it would be something like:
    // self.fieldPropertyMapper[@(fieldType)] = textField.text;
}

我假设有一种通过引用分配的方法,但我忘记了如何做到这一点。 (它是使用&符号还是**?)我不记得了。帮助赞赏!如果我弄乱了我的术语,请随时告诉我。

2 个答案:

答案 0 :(得分:1)

你无法完全按照自己的意愿去做。也就是说,没有指针魔法会做你想做的事。

但是,使用键值编码可以获得基本相同的效果。而不是存储访问属性的结果(例如self.company.website),而是想要将关键路径存储为您感兴趣的值作为字符串 - 例如@"company.website"。然后你可以这样做:

[self setValue:textField.text forKey:self.fieldPropertyMapper[textField.tag]];

答案 1 :(得分:0)

使用NSMapTable初始化NSPointerFunctionsStrongMemory作为键,使用NSPointerFunctionsOpaqueMemory作为值。然后,您可以将支持属性的iVars的地址存储为表中的值。

[self.mapTable setObject:&_company forKey:@(CompanyFieldName)];

尚未对此进行测试,但这应该可以帮助您入门。