0

とに問題がNSdictionaryありNSArrayます。私が達成しようとしているUILabelのは、ループ内のさまざまなデータで繰り返されるものです。データはxmlファイルから取得されます。データを正しく解析しています。次を使用してデータを表示しました。

lblAffected = [[[outageDict objectForKey:@"Outage" ]objectForKey:@"outagenum" ]objectForKey:@"text" ];

私の問題は、1つの停止に関連付けられた複数の停止番号がある場合に発生します。以下は私が現在持っているものです。

if (mapCoordinateIsInPolygon) {
    int outageIndex = [poly.title intValue];
    NSDictionary *outageDict = [sections objectAtIndex:outageIndex];
    //NSLog(@"hit, outageDict = %@", outageDict);

    for (NSDictionary *data in outageDict){
        NSArray *outageData = [outageDict objectForKey:@"Outage" ];
        NSMutableArray *outageInfo = [[NSMutableArray alloc]init];
        for(NSDictionary *outa in outageData){
            [outageInfo addObject:[[outa objectForKey:@"outagenum"] objectForKey:@"text"]];
            NSLog(@"ouatage %@", outageInfo);
        }
        int add = 0;
        NSLog(@"ouatage %i", [outageInfo count]);
        for (int i=0; i < [outageInfo count]; i++){
        add = add+20;
        lblAffected.frame = CGRectMake(130,add,320, 60);
        NSLog(@"added : %i",add);
        lblAffected.backgroundColor = [UIColor clearColor];
        lblAffected.textColor = [UIColor redColor];
        lblAffected.font = [UIFont fontWithName:@"Helvetica" size: 13.0];
        lblAffected.lineBreakMode = UILineBreakModeWordWrap;
        lblAffected.numberOfLines = 1;

        lblAffected.text = outageInfo[i];
        NSLog(@"outage Ifo %@",outageInfo[i]);
        [headerView addSubview:lblAffected];
    }
}

outageDictからデータを取得したら、ラベル内に保存してサブビューに表示する必要があります。複数の停止番号がある場合は、ラベル自体を複製して、すべての停止番号を20px下に表示する必要があります。最終的にはscrollView内に配置しますが、これを修正しようとしているだけです。

今私の質問は、辞書と配列で何が間違っているのかということです。複数の停止があるマップ上のポリゴンビューをタッチすると、ログファイルに表示されますが、停止が1つだけのポリゴンビューをタップするとクラッシュします。私はこれを間違った方法で行っていますか?エラーメッセージはで発生しています

[outageInfo addObject:[[outa objectForKey:@"outagenum"] objectForKey:@"text"]];

そしてそれを述べています

-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x6d2b160

どんな助けでもいただければ幸いです。

4

2 に答える 2

1

表示されるエラーメッセージは一目瞭然です。

-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x6d2b160

文字列オブジェクト(__NSCFString)があり、それを呼び出すことで辞書として扱っていますobjectForKey:。文字列はこのメソッド(またはセレクター)を理解しないため、例外が発生します"unrecognized selector sent to instance"

この例外が発生している行には、への2つの異なる呼び出しが含まれてobjectForKey:おり、例外はそれらのいずれかからのものである可能性があります。

[outageInfo addObject:[[outa objectForKey:@"outagenum"] objectForKey:@"text"]];

ここで呼び出している2つのオブジェクトは次のobjectForKey:とおりです。

  1. outa
  2. [outa objectForKey:@"outagenum"]

それが最初のものか2番目のものかを確認するには、例外またはクラッシュが発生している行にブレークポイントを設定します。次に、デバッガーがその行で実行を停止したら、これら両方のオブジェクトのデータ型を調べます。lldbまたはgdbカーソルでこれらのコマンドを入力して、問題のあるオブジェクトを調べます。poprint objectの略で、問題のオブジェクトの説明を印刷します。

(lldb) po outa
(lldb) po [outa objectForKey:@"outagenum"]

これで、これら2つのうちどちらが文字列オブジェクトであるかがわかります。

于 2012-12-30T00:25:18.660 に答える
0

outaでキーoutagenumに設定しているオブジェクトの種類(辞書であると想定)[outageInfo addObject:[[outa objectForKey:@ "outagenum"] objectForKey:@ "text"]];

それは文字列ですか、それとも辞書ですか?

于 2012-12-29T23:44:18.547 に答える