2011-01-17 3 views
0

iPhoneのアドレス帳から電話番号を取得できません。アドレス帳クラッシュの原因となる電話番号(+45)の接頭辞!

あり数が45のような国コードの接頭辞が含まれていない何も問題はありませんが、それは、私のアプリがクラッシュしない場合は...

これは既知の問題ですか?私は...

おかげ

それについて何かを見つけることができませんでした

EDIT:

私はこのようなPHONENUMBERを得る:

-(void)getContact 
    { 

     ABPeoplePickerNavigationController *pp = [[ABPeoplePickerNavigationController alloc] init]; 
     pp.displayedProperties = [NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonPhoneProperty]]; 
     pp.peoplePickerDelegate = self; 
     [self presentModalViewController:pp animated:YES]; 
     [pp release]; 


    } 

    - (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker { 
     // assigning control back to the main controller 
     [self dismissModalViewControllerAnimated:YES]; 
    } 

    - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person { 
     return YES; 
    } 

-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier { 

      ABMultiValueRef phoneProperty = ABRecordCopyValue(person,property); 
      saveString = (NSString *)ABMultiValueCopyValueAtIndex(phoneProperty,identifier); 
      saveString = [saveString stringByReplacingOccurrencesOfString:@" " withString:@""]; 
      nummerTextField.text = saveString; 
     } 
+1

コードを投稿できますか?クラッシュはどこで起きますか? –

+0

おそらく、Appleの誰かがデンマーク語を嫌うかもしれません;)しかし、ややそうは思われません。 – spender

+0

:-)クラッシュは、saveString =(NSString *)ABMultiValueCopyValueAtIndex(phoneProperty、識別子)で発生します。番号が+45 ... – CCDEV

答えて

0

はどのようにあなたのアドレス帳オブジェクトを取得しています一度それが取得されると、それから番号を取得するためにそれをどのように処理するのですか?私はあなたが言及したものと同じことを行うために以下のコードを使用しています。

ABRecordRef person = ABAddressBookGetPersonWithRecordID(appDelegate.addressBook, contactId); 

ABMultiValueRef multiValue = ABRecordCopyValue(person, kABPersonPhoneProperty); 

NSArray *allNumbers = (NSArray *)ABMultiValueCopyArrayOfAllValues(multiValue); 
NSMutableDictionary *filteredNumbers = [NSMutableDictionary new]; 

if([allNumbers count] > 0) { 
    for(int contactIndex = 0; contactIndex < [allNumbers count]; contactIndex++) { 
     NSString *contactValue = (NSString *)ABMultiValueCopyLabelAtIndex(multiValue, contactIndex); 
     if(!([contactValue isEqualToString:@"_$!<WorkFAX>!$_"] || [contactValue isEqualToString:@"_$!<HomeFAX>!$_"] || [contactValue isEqualToString:@"_$!<Pager>!$_"])) { 

      if([[contactValue substringWithRange:contactLabelCharacterCustom] isEqualToString:@"_$"]) 
       typeOfContact = [contactValue substringWithRange:contactLabelCharacter]; 
      else 
       typeOfContact = [contactValue substringWithRange:(NSRange){0,1}]; 
      NSString *value = (NSString *)ABMultiValueCopyValueAtIndex(multiValue, contactIndex); 
      [filteredNumbers setValue:typeOfContact forKey:value]; 
      [value release]; 
      value = nil; 
     } 
     [contactValue release]; 
     contactValue = nil; 
    } 
} 

確かに役に立ちます。

乾杯

+0

私のコードを試してください、それは間違いなく動作します – Aditya

+0

ちょうどそれを試してみました...私は魔法使いの番号/電子メールの法律を選択するユーザーによって数値にアクセスしています。彼/彼女は欲しい。あなたの事例を手に入れることができませんでした。(おそらく、後でもう一度試してみるといいかもしれません;) – CCDEV

+0

そのメイトに乾杯! – Aditya

0

これは私の問題を解決しました。誰かが助けてくれることを願っています。

ABMultiValueRef multiValue = ABRecordCopyValue(person, property); 

     NSString *number = (NSString *)ABMultiValueCopyValueAtIndex(multiValue, ABMultiValueGetIndexForIdentifier(multiValue, identifier)); 

// Error was here: NSString *value = (NSString *)ABMultiValueCopyValueAtIndex(multiValue, contactIndex); 

     //Copy the number etc before cleaning everything up 

     saveString = number; 
     saveString = [saveString stringByReplacingOccurrencesOfString:@" " withString:@""]; 
     nummerTextField.text = saveString; 

     [number release]; 
     CFRelease(multiValue); 
関連する問題