0

私はiPhone開発に不慣れです.私はこれでアプリを開発しています.この辞書を解析し、電話番号を配列に保存したい.誰か助けてください..事前に感謝します.

-(void)filterContacts{
NSLog(@"I am here");
NSArray *letters = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil];
NSMutableArray* test=[[NSMutableArray alloc]init];
NSMutableArray* obj=[[NSMutableArray alloc]init];
NSLog(@" Data %@", dataArray);

  for (int i=0; i<arrayLetters.count; i++) {
        [test addObject:[[dataArray objectAtIndex:0] valueForKey:[arrayLetters objectAtIndex:i]]];
}
for (NSDictionary *dict2 in test) {

    NSLog(@"%@",[dict2 valueForKey:@"telephone"]);
}

}

この配列を印刷すると、null が取得されます。解析する必要があるデータを以下に示します。

2012-12-03 20:08:29.314(
  )

 2012-12-03 20:08:29.315  (
"1 (234) 560-789,20313561301"
  )

 2012-12-03 20:08:29.316  (
   "(000) 000-0000"
  )


DataArray (
    {
    "#" =         (
    );
    A =         (
    );
    B =         (
    );
    C =         (
    );
    D =         (
    );
    E =         (
    );
    F =         (
    );
    G =         (
    );
    H =         (
    );
    I =         (
    );
    J =         (
    );
    K =         (
                    {
            letter = K;
            name = kkkkkk;
            rowSelected = "-1";
            telephone = "1 (234) 560-789,20313561301";
            telephoneSelected = "";
        }
    );
    L =         (
    );
    M =         (
    );
    N =         (
    );
    O =         (
    );
    P =         (
    );
    Q =         (
    );
    R =         (
                    {
            letter = R;
            name = RRRRR;
            rowSelected = "-1";
            telephone = "1234567890";
            telephoneSelected = "1234567890";
        }
    );
    S =         (
    );
    T =         (
    );
    U =         (
    );
    V =         (
    );
    W =         (
    );
    X =         (
    );
    Y =         (
    );
    Z =         (
    );
}

)
4

2 に答える 2

1

ループにエラーがあります:

for (NSDictionary *dict in dataArray) {
    [test addObject:[[dataArray objectAtIndex:0] valueForKey:[arrayLetters objectAtIndex:i]]];
    [obj addObject: [[dataArray objectAtIndex:0]valueForKey:@"telephone"]];
}

NSDictionary をどのように反復処理しているかに注意してください。ただし、ループ内のどこにも実際にループ変数を参照していません。最初の行は dict を参照する必要があり、適切な辞書ではなく辞書の値にインデックスを付けようとしているため、2 行目は間違っているように見えます。これを試して:

for (NSDictionary *dict in dataArray) {
    [test addObject:dict valueForKey:[arrayLetters objectAtIndex:i]]];
    [obj addObject:[dataArray valueForKey:@"telephone"]];
}

繰り返しますが、投稿に情報がないため、ここでいくつかの仮定を立てています。元の投稿には、dataArray の形式の詳細 (データ サンプルは dataArray の内容であると思われますが、これを明示的に言うと役立ちます) や、arrayLetters がどうあるべきかなどの詳細が欠けていました。したがって、コードに他の問題がある可能性があります。上記で問題が解決しない場合は、投稿を編集してその情報を含めてください。

于 2012-12-03T13:56:01.980 に答える
0

あなたが提供した詳細に従って、辞書を適切に解析していません。コードを変更しました。それを確認します。

-(void)filterContacts{
NSLog(@"I am here");
NSMutableArray* test=[[NSMutableArray alloc]init];
NSMutableArray* obj=[[NSMutableArray alloc]init];
NSLog(@" Data %@", dataArray);

for (int i=0; i<arrayLetters.count; i++) {
    for (NSDictionary *dict in dataArray) {
        [test addObject:[dict valueForKey:[arrayLetters objectAtIndex:i]]];
         if([test objectAtIndex:0]!= nil){
              [obj addObject: [[[dict valueForKey:[arrayLetters objectAtIndex:i]] objectAtIndex:0]valueForKey:@"telephone"]];
           }

}
   // NSLog(@" My test %@", obj);

}

編集

-(void)filterContacts{
NSLog(@"I am here");
NSArray *letters = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil];
NSMutableArray* test=[[NSMutableArray alloc]init];
NSMutableArray* obj=[[NSMutableArray alloc]init];
NSLog(@" Data %@", dataArray);

  for (int i=0; i<arrayLetters.count; i++) {
        [test addObject:[[dataArray objectAtIndex:0] valueForKey:[arrayLetters objectAtIndex:i]]];
}
for (NSDictionary *dict2 in test) {

    NSLog(@"%@",[[dict2 objectAtIndex:0] valueForKey:@"telephone"]);
}

}

dict2 では、値は次のようになります

( 
                {
        letter = K;
        name = kkkkkk;
        rowSelected = "-1";
        telephone = "1 (234) 560-789,20313561301";
        telephoneSelected = "";
    }
);

したがって、辞書でキー objectAtIndex:0を識別するために表示する必要があります。telephoneNote check for the character "K" or "R" only coz all other character values are empty

于 2012-12-03T13:59:47.437 に答える