2012-04-30 11 views
-1

誰でも.. 私は基本的にABAddressBookと連絡先のデータを扱うiPhone用のアプリを開発しようとしています... 私の目標は、すべての連絡先データ(最初のステップ、名前、電話機)電子メールでファイルに..今xcodeの連絡先データ

、私は連絡先データに到達しようとしている、と私は2つの異なるアレイ、名前と電話アレイに追加したい...まず

、私は私はボタンを押したときに画面内のすべてのデータを参照しようとすると "連絡先を表示"。データは画面に表示されます。 2番目のボタン「連絡先を送信」を押すと、ファイルを電子メールアカウントに送信する必要があります。これは私のアプリケーションの動作方法です。

画面にデータを表示する際に問題が発生します。 ..私は何かを書いたが、それはテキストビューの画面上に何も与えていない。 この問題を解決するのに手伝ってもらえますか?ここで

は、連絡先(listCon法)をリストするためのコードです:ちょうどあなたのコードを一瞥


-(IBAction)listCon:(id)sender 
{ 

    NSMutableArray *names = [[NSMutableArray alloc] init]; 

    NSMutableArray *numbers1= [[NSMutableArray array] init]; 

    NSMutableArray *numbers2= [[NSMutableArray array] init]; 

    NSMutableArray *numbers3= [[NSMutableArray array] init]; 

    ABAddressBookRef addressBook = ABAddressBookCreate(); 

    if (addressBook != nil) 
    { 

     NSLog(@"Successfully accessed the address book."); 

     CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 
     CFIndex nPeople= ABAddressBookGetPersonCount(addressBook); 

     NSUInteger peopleCounter = 0; 
     for (peopleCounter = 0;peopleCounter < nPeople; peopleCounter++) 
     { 

      ABRecordRef thisPerson = CFArrayGetValueAtIndex(allPeople,peopleCounter); 

      NSString *contactFirstLast = [NSString stringWithFormat:@"%,%",ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty), ABRecordCopyValue(thisPerson,kABPersonLastNameProperty)]; 

      [names insertObject:contactFirstLast atIndex:peopleCounter]; 

      ABMultiValueRef phoneNumbers = ABRecordCopyValue(thisPerson,kABPersonPhoneProperty); 

      NSString *firstPhone = (__bridge_transfer NSString*) ABMultiValueCopyValueAtIndex(phoneNumbers, 0); 

      NSString *secondPhone = (__bridge_transfer NSString*) ABMultiValueCopyValueAtIndex(phoneNumbers, 1); 

      NSString *thirdPhone = (__bridge_transfer NSString*) ABMultiValueCopyValueAtIndex(phoneNumbers, 2); 

      [numbers1 insertObject:firstPhone atIndex:peopleCounter]; 
      [numbers2 insertObject:secondPhone atIndex:peopleCounter];        
      [numbers3 insertObject:thirdPhone atIndex:peopleCounter]; 
    }   
} 

myView.text=[names componentsJoinedByString:@"\n\n"];  

myView.text=[numbers1 componentsJoinedByString:@"\n\n"];  

myView.text=[numbers2 componentsJoinedByString:@"\n\n"]; 

myView.text=[numbers3 componentsJoinedByString:@"\n\n"]; 
} 

答えて

0

、あなたがこれを行うことはできません。

NSString *contactFirstLast = [NSString stringWithFormat:@"%,%",ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty), ABRecordCopyValue(thisPerson,kABPersonLastNameProperty)]; 

をいくつかのエラーがあります。あなたのstringWithFormat:の最初のオフ%はフォーマット指定子ではありません。あなたはおそらく%@を考えています。次に、kABPersonFirstNamePropertyの値をコピーすると、CFStringRefが返されます。これは、テキストフィールドに名前を表示するのとは異なります。フリーダイヤルABRecordCopyValue()の結果をブリッジする必要があります。これは、ABRecordCopyValue()の前にこの行((__bridge_transfer NSString *))を追加することで行うことができます。すべての修正内容は、次のようになります。

NSString *contactFirstLast = [NSString stringWithFormat:@"%@,%@", (__bridge_transfer NSString *)ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty), (__bridge_transfer NSString *)ABRecordCopyValue(thisPerson,kABPersonLastNameProperty)]; 

このヘルプはすべてのエラーをカバーしていない可能性があります。