在用户的通讯簿kABPersonInstantMessageProperty字段中存储记录定位器

时间:2010-09-21 18:58:00

标签: iphone sdk contacts addressbook abaddressbook

我有一个应用程序,它使用用户的联系人地址簿。我还希望以每个用户为基础存储其他信息(基于每个地址簿条目)。我允许用户导入单个用户,地址簿组或其所有联系人。因为我希望继续允许外部应用程序更改用户地址簿,所以我不会导入所有信息。相反,我选择为每个导入的用户更改通讯簿条目,添加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);

有人可以帮忙吗?我会很感激。

1 个答案:

答案 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);