2012-12-27 19 views
5

アドレス帳に新しい連絡先を作成したいと思います。 問題は、より多くのURL(一部のソーシャルネットワークにWebアドレス)を保存する場合に表示されます。 私のコードはiOS6のシミュレータで完璧に動作します。しかし、iOS6を搭載した実際のiPhoneでは、URLを除くすべての値が保存されます。 私は数日を探していて解決策を見つけることができませんでした。誰かが助けてくれれば非常に感謝しています。複数値URLアドレス帳iphone

マイコード:

-(void) addContactToAddressBook:(ABAddressBookRef) iPhoneAddressBook 
{ 

    CFErrorRef error = NULL; 

    ABRecordRef newPerson = ABPersonCreate(); 

    //Name and phone number 
    ABRecordSetValue(newPerson, kABPersonFirstNameProperty, (__bridge CFStringRef)_nameField.text, &error); 
    ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType); 
    ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFStringRef)_phoneField.text, kABPersonPhoneMainLabel, NULL); 
    ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone,nil); 

    //Email value 
    ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType); 
    ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFStringRef)_emailField.text, kABWorkLabel, NULL); 
    ABRecordSetValue(newPerson, kABPersonEmailProperty, emailMultiValue, nil); 
    CFRelease(emailMultiValue); 

    //URL values 
    ABMutableMultiValueRef urlMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType); 
    ABMultiValueAddValueAndLabel(urlMultiValue, (__bridge CFStringRef)_FacebookField.text, (CFStringRef)@"Facebook", NULL); 
    ABMultiValueAddValueAndLabel(urlMultiValue, (__bridge CFStringRef)_twitterField.text, (CFStringRef)@"Twitter", NULL); 
    ABMultiValueAddValueAndLabel(urlMultiValue, (__bridge CFStringRef)_linkedinField.text, (CFStringRef)@"Linkedin", NULL); 
    ABMultiValueAddValueAndLabel(urlMultiValue, (__bridge CFStringRef)_googleField.text, (CFStringRef)@"Google+", NULL); 
    ABRecordSetValue(newPerson, kABPersonURLProperty, urlMultiValue, nil); 
    CFRelease(urlMultiValue); 

    ABAddressBookAddRecord(iPhoneAddressBook, newPerson, &error); 

    ABAddressBookSave(iPhoneAddressBook, &error); 
    if (error != NULL) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Contact not saved" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil, nil]; 
     [alert show]; 
    }else{ 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Contact saved" message:@"Your contact was successfully saved" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
     [alert show]; 
    } 
} 

ありがとう!

+0

誰でも私を助けてくれますか?私は解決策を見つけることができません.... ありがとう。 – Joan

答えて

0

リンゴのサイトのドキュメント(ページの中央にある[プライバシー]までスクロールします)に応じて、プログラムでアクセスできるようにするには、アドレス帳へのアクセスを許可する必要があります。私がやったことがここにあります。

-(void)requestPermission 
{ 
     ABAddressBookRef iPhoneAddressBook = ABAddressBookCreateWithOptions(NULL, NULL); 

     if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { 
      ABAddressBookRequestAccessWithCompletion(iPhoneAddressBook, ^(bool granted, CFErrorRef error) { 
       if (granted) { 
        // First time access has been granted, add the contact 
        [self addContactToAddressBook:iPhoneAddressBook]; 
       } else { 
        // User denied access 
        // Display an alert telling user the contact could not be added 
       } 
      }); 
     } 
     else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { 
      // The user has previously given access, add the contact 
      [self addContactToAddressBook:iPhoneAddressBook]; 
     } 
     else { 
      // The user has previously denied access 
      // Send an alert telling user to change privacy setting in settings app 
     } 

    } 

-(void)addContactToAddressBook:(ABAddressBookRef)iPhoneAddressBook 
{ 
    CFErrorRef error = NULL; 
    ABRecordRef newPerson = ABPersonCreate(); 

    //Name and phone number 
    ABRecordSetValue(newPerson, kABPersonFirstNameProperty, (__bridge CFStringRef)_nameField.text, &error); 
    ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType); 
    ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFStringRef)_phoneField.text, kABPersonPhoneMainLabel, NULL); 
    ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone,nil); 
    CFRelease(multiPhone); 

    //Email value 
    ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType); 
    ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFStringRef)_emailField.text, kABWorkLabel, NULL); 
    ABRecordSetValue(newPerson, kABPersonEmailProperty, emailMultiValue, nil); 
    CFRelease(emailMultiValue); 

    //URL values 
    ABMutableMultiValueRef urlMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType); 
    ABMultiValueAddValueAndLabel(urlMultiValue, (__bridge CFStringRef)_FacebookField.text, (CFStringRef)@"Facebook", NULL); 
    ABMultiValueAddValueAndLabel(urlMultiValue, (__bridge CFStringRef)_twitterField.text, (CFStringRef)@"Twitter", NULL); 
    ABMultiValueAddValueAndLabel(urlMultiValue, (__bridge CFStringRef)_linkedinField.text, (CFStringRef)@"Linkedin", NULL); 
    ABMultiValueAddValueAndLabel(urlMultiValue, (__bridge CFStringRef)_googleField.text, (CFStringRef)@"Google+", NULL); 
    ABRecordSetValue(newPerson, kABPersonURLProperty, urlMultiValue, nil); 
    CFRelease(urlMultiValue); 

    // ... 
    // Set other properties 
    // ... 
    ABAddressBookAddRecord(iPhoneAddressBook, newPerson, &error); 

    ABAddressBookSave(iPhoneAddressBook, &error); 
    CFRelease(newPerson); 
    CFRelease(iPhoneAddressBook); 
    if (error != NULL) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Contact not saved" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil, nil]; 
     [alert show]; 
    }else{ 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Contact saved" message:@"Your contact was successfully saved" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
     [alert show]; 
    } 
} 
関連する問題