2012-03-11 9 views
0

今、私はこのコードを持ってまし:奇妙な行動(連絡先+ NSDictionaryの)

-(void)getContacts{ 
ABAddressBookRef currentAddressBook = ABAddressBookCreate(); 
if (currentAddressBook) { 
    CFArrayRef allBook = ABAddressBookCopyArrayOfAllPeople(currentAddressBook); 
    if (allBook) { 
     for (int index=0; index < CFArrayGetCount(allBook); index++){ 
      ABRecordRef currentPerson = CFArrayGetValueAtIndex(allBook, index); 

      NSString *firstName = (__bridge NSString *)ABRecordCopyValue(currentPerson, kABPersonFirstNameProperty); 
      NSString *lastName = (__bridge NSString *)ABRecordCopyValue(currentPerson, kABPersonLastNameProperty); 
      NSData *imageData = (__bridge NSData*)ABPersonCopyImageDataWithFormat(currentPerson, kABPersonImageFormatThumbnail); 
      NSMutableArray *tempArrayForPhones = [[NSMutableArray alloc] init]; 

      ABMultiValueRef phoneNumbersMultiValue = ABRecordCopyValue(currentPerson, kABPersonPhoneProperty); 
      for(CFIndex counter = 0; counter < ABMultiValueGetCount(phoneNumbersMultiValue); counter++){ 
       CFStringRef currentLabel = ABMultiValueCopyLabelAtIndex(phoneNumbersMultiValue, counter); 
       NSString *phoneLabel =(__bridge NSString*) ABAddressBookCopyLocalizedLabel(currentLabel); 

       CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phoneNumbersMultiValue, counter); 
       currentLabel = ABMultiValueCopyLabelAtIndex(phoneNumbersMultiValue, counter); 
       phoneLabel =(__bridge NSString*) ABAddressBookCopyLocalizedLabel(currentLabel); 
       NSString *phoneNumber = (__bridge NSString *)phoneNumberRef; 
       CFRelease(phoneNumberRef); 
       CFRelease(currentLabel); 
       NSDictionary *tempDictForPhonew = [NSDictionary dictionaryWithObjectsAndKeys:phoneNumber,@"number", 
                          phoneLabel,@"label", 
                          nil]; 
       [tempArrayForPhones addObject:tempDictForPhonew]; 
      } 
      NSDictionary *dictionaryWithAddressBook = [NSDictionary dictionaryWithObjectsAndKeys:firstName,@"firstName", 
                           lastName,@"lastName", 
                           imageData,@"image", 
                           tempArrayForPhones,@"phones", 
                           nil]; 
      tempArrayForPhones = nil; 
      [dataArray addObject:dictionaryWithAddressBook]; 

      CFRelease(phoneNumbersMultiValue); 
     } 
     CFRelease(allBook); 
    } 
    CFRelease(currentAddressBook); 
} 
} 

すべてのシミュレータ上で正常に動作しますが、私は必要なすべてのフィールドが含まれていた辞書を持つ配列を取得。しかし、実際のデバイス(iOS 5.1)でコードを実行すると、辞書には名と姓しか付きません。 辞書を初期化してnslogをいくつか実行しようとしましたが、電話機と画像データを持つtemp辞書は存在しましたが、最終的なdataArrayでは存在しませんでした。どうしましたか?

答えて

1

問題が解決しました。アドレス帳を解析するのは間違いでした。名前のない連絡先を処理するのを忘れてしまった。