0

これは、SBJson 解析を介して文字列を取得するために使用しているコードです。

NSMutableArray *abc=[jsonData valueForKey:@"items"];

NSString *imgStr=(NSString *)[abc valueForKey:@"image"];
NSLog(@"%@",imgStr);

ここでabcはNSMutableArray

そしてそれがスローしている例外は

> -[__NSArrayI stringByReplacingOccurrencesOfString:withString:]: unrecognized selector sent to instance
4

2 に答える 2

4

最初の行abcで、NSMutableArray

2 行目では、NSDictionary.

あなたの場合(そして私はここで推測しています)、アイテムの配列があり、各アイテムは「画像」キーを持つ辞書であると思います。

したがって、最初のアイテムを取得するには、使用する可能性があります

  NSDictionary* firstItem = [abc objectAtIndex:0];

次に、そこから画像を抽出できます。

NSString *imgStr=(NSString *)[firstItem valueForKey:@"image"]; 1

 NSString *imgStr = [abc objectForKey:@"image"];

1 @Stig からのコメントを参照

于 2013-01-24T08:42:04.643 に答える
0

あなたのコードにはいくつかの問題があります:

  1. NSArray の場合、valueForKey:別の配列を返します。キャストに関係なく、NSString を返しません。配列の最初のエントリへの参照を取得してから、それを呼び出す必要がありますobjectForKey:

  2. valueForKey:おそらく NSDictionary メソッドを使用する予定の場所でNSKeyValueCoding メソッドを使用していますobjectForKey:。辞書の場合、それらは大まかに互換性がありますが、使用した場合、配列objectForKey:を呼び出すことができないというわかりやすいエラーが発生します。キー値コーディングのセマンティクスが本当に必要な場合にのみ使用してください。objectForKey:valueForKey:

  3. Objective-C でキャストする必要はほとんどありません。idそのようにエラーを隠しているだけです。(この例では問題を隠しているかもしれませんし、隠していないかもしれませんが、(配列を文字列にキャストしようとしているため) 確かに醜く、正しくなく、文字列があると思わせるだけです。不合格。)

あなたはおそらく次のようなものを書くつもりでした:

NSArray *abc = [jsonData valueForKey:@"items"];
NSDictionary *entry = [abc objectAtIndex:0];    
NSString *imgStr = [entry objectForKey:@"image"];
NSLog(@"%@", imgStr);
于 2013-01-24T11:26:02.680 に答える