我在向ABRecordRef添加新的社交个人资料时遇到问题。它总是在ABAdressBookSave上返回崩溃 “[__ NSCFString count]:无法识别的选择器发送到实例”
ABMultiValueRef social = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
if(contact.socialTwitter != nil)
ABMultiValueAddValueAndLabel(social, (__bridge CFTypeRef)([NSDictionary dictionaryWithObjectsAndKeys:
(NSString*)kABPersonSocialProfileServiceTwitter, kABPersonSocialProfileServiceKey,
(__bridge CFStringRef)contact.socialTwitter, kABPersonSocialProfileUsernameKey,
nil]), kABPersonSocialProfileServiceTwitter, NULL);
ABRecordSetValue(record, kABPersonSocialProfileProperty, social, &error);
CFRelease(social);
答案 0 :(得分:1)
我在保存新联系人时遇到了同样的问题。看来你无法保存这样的所有属性。下面的代码对我有用。
ABRecordRef aRecord = ABPersonCreate();
CFErrorRef anError = NULL;
// Username
ABRecordSetValue(aRecord, kABPersonFirstNameProperty, username, &anError);
// Phone Number.
ABMutableMultiValueRef multi = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(multi, (CFStringRef)usercontact, kABWorkLabel, NULL);
ABRecordSetValue(aRecord, kABPersonPhoneProperty, multi, &anError);
CFRelease(multi);
// Company
ABRecordSetValue(aRecord, kABPersonDepartmentProperty, usercompany, &anError);
// email
NSLog(useremail);
ABMutableMultiValueRef multiemail = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(multiemail, (CFStringRef)useremail, kABWorkLabel, NULL);
ABRecordSetValue(aRecord, kABPersonEmailProperty, multiemail, &anError);
CFRelease(multiemail);
// website
NSLog(userwebsite);
ABMutableMultiValueRef multiweb = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(multiweb, (CFStringRef)userwebsite, kABWorkLabel, NULL);
ABRecordSetValue(aRecord, kABPersonURLProperty, multiweb, &anError);
CFRelease(multiemail);
// Function
ABRecordSetValue(aRecord, kABPersonJobTitleProperty, userrole, &anError);
if (anError != NULL)
NSLog(@\"error while creating..\");
CFStringRef personname, personcompind, personemail, personfunction, personwebsite, personcontact;
personname = ABRecordCopyValue(aRecord, kABPersonFirstNameProperty);
personcompind = ABRecordCopyValue(aRecord, kABPersonDepartmentProperty);
personfunction = ABRecordCopyValue(aRecord, kABPersonJobTitleProperty);
personemail = ABRecordCopyValue(aRecord, kABPersonEmailProperty);
personwebsite = ABRecordCopyValue(aRecord, kABPersonURLProperty);
personcontact = ABRecordCopyValue(aRecord, kABPersonPhoneProperty);
ABAddressBookRef addressBook;
CFErrorRef error = NULL;
addressBook = ABAddressBookCreate();
BOOL isAdded = ABAddressBookAddRecord (addressBook, aRecord, &error);
if(isAdded){
NSLog(@\"added..\");
}
if (error != NULL) {
NSLog(@\"ABAddressBookAddRecord %@\", error);
}
error = NULL;
BOOL isSaved = ABAddressBookSave (addressBook, &error);
if(isSaved) {
NSLog(@\"saved..\");
UIAlertView *alertOnChoose = [[UIAlertView alloc] initWithTitle:@\"Phone added successfully to your addressbook\" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@\"Ok\", nil];
[alertOnChoose show];
[alertOnChoose release];
}
if (error != NULL) {
NSLog(@\"ABAddressBookSave %@\", error);
UIAlertView *alertOnChoose = [[UIAlertView alloc] initWithTitle:@\"Unable to save this time\" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@\"Ok\", nil];
[alertOnChoose show];
[alertOnChoose release];
}
CFRelease(aRecord);
CFRelease(personname);
CFRelease(personcompind);
CFRelease(personcontact);
CFRelease(personemail);
CFRelease(personfunction);
CFRelease(personwebsite);
CFRelease(addressBook);