1

リストから名前と電話番号を収集して配列に追加するアプリを作成しています。どうすればいいですか?名と姓を取得できましたが、別のforループにあるため、以下のコードに電話番号を追加する方法がわかりません。シンプルに見えるかもしれませんが、私は新しいので立ち往生しています。

for (i = 0; i < [list count]; i++)
{
    NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);

    NSString *lastName = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);

    NSMutableArray *name = [NSMutableArray array];
    if(firstName != nil)
        [name addObject:firstName];

    if(lastName != nil)
        [name addObject:lastName];*/

    [self displaynames:name];


    ABMultiValueRef mobile=ABRecordCopyValue(contactPerson, kABPersonPhoneProperty);

    for (int k=0;k<ABMultiValueGetCount(mobile); k++)
    {
        NSString *mobileNo = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(mobile, k);
        NSLog(@"mobile number: %@",mobileNo);    
    }
}

- (void)displaynames:(NSMutableArray*)names
{
    for (NSMutableArray* name in names)
    {
        NSLog(@"MyResult:%@ %@",[names objectAtIndex:0],[names objectAtIndex:1]);
    }
}

したがって、上記のコードでは、リストから名と姓を取得して配列に追加できます。同様に、携帯電話番号を取得して同じ配列に追加し、displayNames:関数で結果をそのまま取得するにはどうすればよいですか別のforループ。誰かがコードを編集して、上記のコードに加えなければならない変更を教えてください。また、結果にすべてが2回表示されているのはなぜですか?

4

4 に答える 4

1

ユーザー情報を辞書に追加するか、モデル ユーザー オブジェクトを作成して配列に格納することができます。そのため、すべての情報が 1 つのオブジェクトにカプセル化されたままになります。

self.users = [NSMutableArray array];
for (i = 0; i < [list count]; i++)
{
        NSString *firstName = ...

        NSString *lastName = ...

        NSString *mobileNumber = ...

        NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
        if(firstName)
            userInfo[@"FirstName"] = firstName;
        if(lastName)
            userInfo[@"LastName"] = lastName;
        if(mobileNumber)
            userInfo[@"MobileNumber"] = mobileNumber;

        [self.users addObject:userInfo];

    }

を使用して列挙できます

[self.users enumerateObjectsUsingBlock:^(NSDictionary * userInfo, NSUInteger idx, BOOL *stop) {

        NSString *firstName = userInfo[@"FirstName"];
        NSString *mobileNumber = userInfo[@"MobileNumber"];

    }];

名前で単一のユーザーを検索する

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FirstName == %@",@"aUserName"];
NSDictionary *userInfo = [[self.users filteredArrayUsingPredicate:predicate]lastObject];
于 2013-06-05T05:11:48.670 に答える
1

したがって、使用する代わりに、ペアで保存するために使用する必要Arrayがあります。上位レイヤーとして使用するよりも複数のユーザーがいる場合は、ユーザー辞書を配列に追加することを意味し、ユーザーにコードを記述させたいときはいつでも:DictionaryFirstName, LastName and MobileNokeyvalueArray

for(NSDictionary *userDic in yourArray)
{
    NSString *fName = [userDic valueForKey:@"FirstName"];
    ...
}

これは方法の1つです...

于 2013-06-05T05:28:24.257 に答える
0

次の手順を試してください。

NSMutableArray *firstNames;
NSMutableArray *LastNames;
NSMutableArray *Mobile_numbers;
NSMutableArray *type_array;
NSMutableArray *firstandlast;

.........

-(void)get_arr
{
 ABAddressBookRef addressBook = ABAddressBookCreate();
    NSArray *arrayOfPeople = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);    
    NSUInteger index = 0;
    firstNames = [[NSMutableArray alloc] init];
   Mobile_numbers = [[NSMutableArray alloc] init];
    type_array=[[NSMutableArray alloc]init ];
    LastNames=[[NSMutableArray alloc]init ];
   NSMutableArray *firstandlast;

   @try
    {
        for(index = 0; index<=([arrayOfPeople count]-1); index++)
        {

            ABRecordRef currentPerson = (__bridge ABRecordRef)[arrayOfPeople objectAtIndex:index];

            NSString *type;

            ABMultiValueRef phones = (ABMultiValueRef)ABRecordCopyValue(currentPerson, kABPersonPhoneProperty);

            for (int i=0; i < ABMultiValueGetCount(phones); i++)
            {

                //NSString *phone = (NSString *)ABMultiValueCopyValueAtIndex(phones, i);
                ////NSLog(@"%@", phone);
                mobileLabel = (NSString*)ABMultiValueCopyLabelAtIndex(phones, i);


                //NSLog(@"MOG:%@",mobileLabel);


                if([mobileLabel isEqualToString:@"_$!<Mobile>!$_"]||[mobileLabel isEqualToString:@"_$!<Main>!$_"])
                {
                    //NSLog(@"mobile:");
                    type=@"mobile";
                }
                else if ([mobileLabel  isEqualToString:@"_$!<Work>!$_"])
                {
                    //NSLog(@"Work:");
                    type=@"Work";
                }
                else if ([mobileLabel isEqualToString:@"_$!<Home>!$_"])
                {
                    //NSLog(@"Home:");
                    type=@"Home";
                }

                else if ([mobileLabel isEqualToString:@"_$!<Other>!$_"] )
                {
                    //NSLog(@"Other:");
                    type=@"Other";
                }


                mobile = (NSString*)ABMultiValueCopyValueAtIndex(phones, i);

                //NSLog(@"GG:%@",mobile);


                mobile = [mobile stringByReplacingOccurrencesOfString:@"-"
                                                                             withString:@""];

                mobile = [mobile stringByReplacingOccurrencesOfString:@"("
                                                                             withString:@""];

                mobile = [mobile stringByReplacingOccurrencesOfString:@")"
                                                                             withString:@""];

                mobile = [mobile stringByReplacingOccurrencesOfString:@" "
                                                                             withString:@""];

                [Mobile_numbers addObject:mobile];
                [type_array addObject:type];

                NSString *currentFirstName = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonFirstNameProperty);

                ////NSLog(@"NAME:%@",currentFirstName);

                if ([currentFirstName length]!=0)
                {
                    //NSLog(@"NAME:%@",currentFirstName);
                    [firstNames addObject:currentFirstName];
                }
                else
                {
                    //NSLog(@"NAME:DUMMY");
                    currentFirstName=@"";
                    [firstNames addObject:currentFirstName];
                }

                NSString *currentLast = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonLastNameProperty);

                ////NSLog(@"NAME:%@",currentFirstName);

                if ([currentLast length]!=0)
                {
                    //NSLog(@"NAME:%@",currentLast);
                    [LastNames addObject:currentLast];
                }
                else
                {
                    //NSLog(@"NAME:DUMMY");
                    currentLast=@"";
                    [LastNames addObject:currentLast];
                }


                   NSString *temp_f_l=[NSString stringWithFormat:@"%@ %@",currentFirstName,currentLast];
                [firstandlast addObject:temp_f_l];
            }


            NSLog(@"MOB:%@",Mobile_numbers);
            NSLog(@"TYPE:%@",type_array);



            NSLog(@"FN:%@",firstNames);
            NSLog(@"FN:%@",LastNames);


             NSLog(@"FN&LN:%@",firstandlast);

        }

    }
    @catch (NSException *exception)
    {
        //NSLog(@"CATCH");


    }

}

私のアプリケーションで。このコードを使用して、アドレスブックの内容を配列に格納しています。お役に立てば幸いです。

于 2013-06-05T05:28:26.963 に答える