0

リモートサーバーから2次元配列を取得しています。

- (NSMutableArray*)qBlock{

NSURL *url = [NSURL URLWithString:@"http://wsome.php"];
NSError *error;
NSStringEncoding encoding;
NSString *response = [[NSString alloc] initWithContentsOfURL:url 
                                                usedEncoding:&encoding 
                                                       error:&error];
const char *convert = [response UTF8String];
NSString *responseString = [NSString stringWithUTF8String:convert];
NSMutableArray *sample = [responseString JSONValue];

return sample;
}

そしてそれらを入れます:

NSMutableArray *qnBlock1 = [self qBlock];
NSString *answer1 = [NSString stringWithFormat:[[qnBlock1 objectAtIndex:0]objectAtIndex:1]];
answer = [[NSMutableDictionary alloc]init];
[answer setObject:answer1 forKey:@"1"];

question1.text = [[qnBlock1 objectAtIndex:0] objectAtIndex:0];
label1a.text = [[qnBlock1 objectAtIndex:0]objectAtIndex:2];
label1b.text = [[qnBlock1 objectAtIndex:0]objectAtIndex:3];
label1c.text = [[qnBlock1 objectAtIndex:0]objectAtIndex:4];
label1d.text = [[qnBlock1 objectAtIndex:0]objectAtIndex:5];

実行時にこのエラーを受け取りました

-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x6c179502012-04-30 09:43:50.794 AppName[371:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x6c17950'

これは、2次元配列の構文の問題が原因ですか?

4

2 に答える 2

3

多次元配列を取り戻すことはできません。NSDictionaryオブジェクトの配列が返されます。objectAtIndex:取得したエラーは、メッセージをNSDictionaryオブジェクトに送信しようとしていることを示していますが、そのようなセレクターがないため失敗します。


アップデート:

側でおしゃべりした後、次のことが真実であることが明らかになりました。

  1. ユーザーはSBJsonライブラリを使用して、自分のphpWebサービスからの戻り値を解析していました。
  2. 戻り値は次のいずれかでした:
    • 各キーがリスト内の(インデックスベースではない)場所のテキスト表現(@ "1"、@ "2"など)であり、各値がNSStringオブジェクトのNSArrayであるNSDictionary、または
    • NSStringオブジェクトのNSArray(単一の「回答」が返される方法のようです)

これが、彼が戻り値を反復処理できるようにするために提供したコードです。

NSURL *url = [NSURL URLWithString:@"{his url}"];
NSError *error;
NSStringEncoding encoding;
NSString *response = [[NSString alloc] initWithContentsOfURL:url usedEncoding:&encoding error:&error];
const char *convert = [response UTF8String];
NSString *responseString = [NSString stringWithUTF8String:convert];
NSLog(@"%@", responseString);
SBJsonParser *parser = [[SBJsonParser alloc] init];
id sample = [parser objectWithString:responseString];
if ([sample isKindOfClass:[NSDictionary class]]) {
    for (id item in sample) {
        NSLog(@"%@", [item description]);
        NSArray *subArray = [sample objectForKey:item]; // b/c I know it's an array
        for (NSString *str in subArray) {
            NSLog(@"item: %@", str);
        }
    }
} else if ([sample isKindOfClass:[NSArray class]]) {
    for (NSString *str in sample) {
        NSLog(@"item: %@", str);
    }
}

お役に立てば幸いです、J!

于 2012-04-30T01:53:16.517 に答える
1

エラーメッセージから、objectAtIndexを辞書に送信していると思います。NSDictionaryにはそのような方法はありません。代わりにobjectForKeyを使用する必要があります。

于 2012-04-30T01:53:27.637 に答える