给定此键/值对:
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数据,并将其转换为通讯簿条目的属性。
答案 0 :(得分:2)
这更像是一个应用程序设计问题而不是其他任何问题。我用你所拥有的东西看待它的方式,你需要一个“长switch
语句”某处。也许最简洁的方式就是你自己发送签名的邮件像:
- (ABPropertyID)recordPropertyFromMyEnum:(MyEnumType)property
请考虑一下:如果您使用ABPropertyID
进行一对一排列的唯一枚举,为什么不使用ABPropertyID
?