-1

みなさん..基本的に連絡先データを処理するiPhone用アプリを開発しようとしていABAddressBookます...私の目標は、すべての連絡先データ(最初のステップでは、名前と電話)をファイルで電子メールで送信することです。

今、私は連絡先データに到達しようとしています、そして私はそれらを2つの異なる配列、名前と電話の配列に追加したいと思います。

最初は、「連絡先リスト」ボタンを押したときに画面にすべてのデータを表示しようとしています。データが画面に表示されます。次に、2番目のボタン[連絡先の送信]を押すと、ファイルが電子メールアカウントに送信されます。これが私のアプリの動作方法です。

画面にデータを表示するのに問題があります。何かを書きましたが、textViewの画面に何も表示されません。この問題を解決するのを手伝ってもらえますか?

連絡先を一覧表示するためのコードは次のとおりです(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"];
}   
4

1 に答える 1

0

あなたのコードをちらりと見るだけでは、これを行うことはできません:

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

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

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

このヘルプが役立つことを願っています (すべてのエラーをカバーしていない可能性があります)!

于 2012-07-02T20:18:20.437 に答える