1

私はNSDictionary(関連する場合は、を使用してJSONから解析したJSONObjectWithData)次のようになります:

{
ids =     (
    49939999,
    44754859,
    14424892,
    16311801,
    16045487,
    31247745,
    5982852
);
"next_cursor" = 0;
"next_cursor_str" = 0;
"previous_cursor" = 0;
"previous_cursor_str" = 0;
}

を使用してログに記録された場合NSLog(@"%@", jsonResult);

私はでIDにアクセスしており、タイプfriends = [jsonResult objectForKey:@"ids"];が期待されますが、明らかにタイプはです。なんで?friendsNSArray__NSCFArray

次に、を使用して友達のサイズを取得しようとします[friends count]が、実行時に例外が発生します。

NSDictionaryに保存された「NSArray」のカウントを取得するにはどうすればよいですか?

更新:コード

        NSError *jsonError = nil;
        id jsonResult = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonError];
        if (jsonResult != nil) {



            self.friends = [jsonResult objectForKey:@"ids"];

            NSLog(@"%@", self.friends);

            NSLog(@"%@", [self.friends class]);

            NSLog(@"%@", [self.friends count]);

            dispatch_sync(dispatch_get_main_queue(), ^{
                [self.tableView reloadData];
            });                
        }
4

3 に答える 3

3

NSCFArrayはNSArrayのサブクラスです。NSArrayを扱う場合、ほとんどの場合、それが扱っている具象クラスです。これは、NSArrayがクラスクラスターであるとドキュメントで示されている意味です。

印刷しようとすると[friends count]、フォーマット文字列を使用するため、クラッシュが発生します@"%@"%@NSLogにオブジェクトを予期するように指示しますが、これはNSUIntegerです。代わりに、を実行する必要がありますNSLog(@"%lu", (unsigned long)[friends count])。(フォーマット指定子の概念が完全に明確でない場合は、Appleに便利なガイドがあります。)

于 2012-05-30T15:43:20.873 に答える
0

__NSCFArrayは、いわゆるフリーダイヤルブリッジングをサポートするために使用するNSArray基本的な構造にすぎません。CFArrayこれを使用してください:

NSArray *friends = (NSArray*)[jsonResult objectForKey:@"ids"];
于 2012-05-30T15:43:18.383 に答える
0

うわー、それは私自身の愚かだった。私はちょうどそれNSLog(@"%@")がオブジェクトを取るだけであることを知りました。NSLog(@"%d")整数を入力するには、特にを使用する必要があります。

ただし、コンパイル時にこれが検出されない理由はわかりません。

ソース:http ://cocoadev.com/wiki/NSLog

于 2012-05-30T16:20:31.517 に答える