如何使用键值编码在ABPerson中设置属性值

时间:2010-02-23 23:29:22

标签: iphone objective-c cocoa-touch

给定此键/值对:
FirstName = "Steve"

我想在iPhone地址簿中设置ABPerson的属性,如下所示: ABRecordSetValue(person, kABPersonFirstNameProperty, @"Steve", nil);

问题是,我不会总是知道提交了什么密钥。 (它将等同于之前没有“kABPerson”的属性常量,以及之后的“Property”)。 提交的密钥可以是任意数量的属性:“JobTitle”,“Note”等。 如何将该键转换为通讯簿属性常量。即:
FirstName to kABPersonFirstNameProperty

我以为我可以使用键值编码,但在这种情况下,我不知道如何实现它。

为了提高编码效率,我试图避免使用长Switch语句,或使用填充了每个可能属性的数组。

更新

我在这里发现我需要通过它的字符串表示来访问常量。但我不知道这是否可能。因此kABPersonJobTitleProperty是一个等于18的常量。所以如果以下代码有效,我会很高兴:

  NSString *fieldName = [NSString stringWithString:@"JobTitle"];
  NSString *propertyName = [NSString stringWithFormat:@"kABPerson%@Property", fieldName];

ABRecordRef person = ABPersonCreate(); ABRecordSetValue(person, propertyName, @"Fisherman", nil);

当然,运行它会返回此警告传递'ABRecordSetValue'的参数2从指针生成整数而不使用强制转换。因为字符串propertyName没有解析为它正在寻找的整数或常量。

有人能看到让这项工作的方法吗?

我的设置类似于此处列出的问题:
Key-Value Coding

我正在获取我可以控制的xml数据,并将其转换为通讯簿条目的属性。

1 个答案:

答案 0 :(得分:2)

这更像是一个应用程序设计问题而不是其他任何问题。我用你所拥有的东西看待它的方式,你需要一个“长switch语句”某处。也许最简洁的方式就是你自己发送签名的邮件像:

- (ABPropertyID)recordPropertyFromMyEnum:(MyEnumType)property

请考虑一下:如果您使用ABPropertyID进行一对一排列的唯一枚举,为什么不使用ABPropertyID