2013-07-31 2 views
2

У меня проблема с добавлением новых социальных профилей в ABRecordRef. Он всегда возвращается аварии на ABAdressBookSave «[кол __NSCFString]: непризнанные селектор направил к экземпляру»ABPersonSocialProfile crash app

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

ответ

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