我有一个应用程序,它使用用户的联系人地址簿。我还希望以每个用户为基础存储其他信息(基于每个地址簿条目)。我允许用户导入单个用户,地址簿组或其所有联系人。因为我希望继续允许外部应用程序更改用户地址簿,所以我不会导入所有信息。相反,我选择为每个导入的用户更改通讯簿条目,添加kABPersonInstantMessageProperty
键。我希望使用MyAppsRecordLocaterNumber@MyAppsDomain.com
填充此密钥作为用户名。我认为最终用户会立即看到这一点,a:
不引人注意,b:
链接到我的应用信息(用我的应用添加和保留的内部信息挂钩外部联系信息)。唯一的问题?我不知道如何在kABPersonInstantMessageProperty
键中添加条目。我已经想出了如何添加多值条目,例如“归属地址”,但是当搜索堆栈溢出时,我想出了关于此密钥(kABPersonInstantMessageProperty
)的问题的4个(仅有四个!)条目。
我的代码中有一部分用于将“家庭住址”添加到某人的地址簿条目中,我承认我不知道如何将其更改为kABPersonInstantMessageProperty。
ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
NSMutableDictionary *addressDict = [[NSMutableDictionary alloc] init];
NSMutableString *street = [NSMutableString stringWithFormat:@"%i",i];
[street appendString:@" Main Street"];
[addressDict setObject:[NSString stringWithString:street] forKey:(NSString *)kABPersonAddressStreetKey];
[addressDict setObject:@"San Jose" forKey:(NSString *)kABPersonAddressCityKey];
[addressDict setObject:@"CA" forKey:(NSString *)kABPersonAddressStateKey];
NSMutableString *zip = [NSMutableString stringWithString:@"95"];
[zip appendString:[NSString stringWithFormat:@"%00i",i]];
[addressDict setObject:zip forKey:(NSString *)kABPersonAddressZIPKey];
ABMultiValueAddValueAndLabel(address, addressDict, kABHomeLabel, NULL);
ABRecordSetValue(record, kABPersonAddressProperty, address, NULL);
// add the record
ABAddressBookAddRecord(addressBook, record, NULL);
有人可以帮忙吗?我会很感激。
答案 0 :(得分:3)
GOT IT!
这很简单!感谢link text,他们在这个问题上缺乏Google的答案时遇到了同样的问题。谢谢,凯西!
record
是ABPerson记录,所有ABCreate
内容已经完成,i
是顺序记录定位器整数......
ABMutableMultiValueRef im = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
NSMutableDictionary *imDict = [[NSMutableDictionary alloc] init];
[imDict setObject:@"MyAppName" forKey:(NSString*)kABPersonInstantMessageServiceKey];
NSMutableString *iMID = [NSMutableString stringWithFormat:@"%i",i];
[iMID appendString:@"RL@MyAppDomain"];
[imDict setObject:iMID forKey:(NSString*)kABPersonInstantMessageUsernameKey];
ABMultiValueAddValueAndLabel(im, imDict, kABHomeLabel, NULL);
[imDict release];
ABRecordSetValue(record, kABPersonInstantMessageProperty, im, NULL);