2

我在向 ABRecordRef 添加新的社交资料时遇到问题。它总是在 ABAdressBookSave "[__NSCFString count]: unrecognized selector sent to instance" 上返回崩溃

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);
4

1 回答 1

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);
于 2013-08-02T10:09:53.567 回答