OGeek|极客世界-中国程序员成长平台

标题: ios - ABPersonSocialProfile 崩溃应用 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 13:14
标题: ios - ABPersonSocialProfile 崩溃应用

我在向 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);



Best Answer-推荐答案


我在保存新联系人时遇到了同样的问题。看来您无法像这样保存所有属性。下面的代码对我有用。

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\"hone 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);

关于ios - ABPersonSocialProfile 崩溃应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976266/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4