-2

最新のSDKを使用してiPhoneアプリケーションを開発しています。

私はこのコードを持っています:

-(void) connectionDidFinishLoading:(NSURLConnection *) connection
{
    NSError* error = nil;
    NSObject* response =
        [NSJSONSerialization JSONObjectWithData:webData
                                        options:NSJSONReadingMutableContainers
                                          error:&error];

    if ([response isKindOfClass:[NSArray class]])
    {
        NSDictionary* resp = [response objectAtIndex:0];

この行はNSDictionary* resp = [response objectAtIndex:0];機能しません。このコンパイル時エラーが発生します:No visible @interface for 'NSObject' declares the selector 'objectAtIndex:'

私はこのようなことをすることができます:

NSArray* array = [NSArray initWithArray:response];しかし、それは2つのオブジェクトを作成し、リソースを浪費すると思います。

NSObjectをNSArrayにキャストするにはどうすればよいですか?

4

3 に答える 3

2

このチュートリアルid response =では、の代わりにを使用する必要がある理由を説明しますNSObject* response =

私が使用する場合、私はオブジェクトidに任意のメッセージを送信できresponseます。

なので、[response isKindOfClass:[NSArray class]]問題ないか確認してみたら[response objectAtIndex:0]

また、コンパイル時のエラーにはなりません。

同じ問題を抱える人が増えるので、この回答を追加しました。

于 2012-12-18T16:24:39.823 に答える
1

これは機能するはずです:

-(void) connectionDidFinishLoading:(NSURLConnection *) connection
{
    NSError* error = nil;
    NSObject* response =
    [NSJSONSerialization JSONObjectWithData:webData
                                    options:NSJSONReadingMutableContainers
                                      error:&error];

    if ([response isKindOfClass:[NSArray class]])
    {
        NSArray *responseArray = (NSArray*)response;
        NSDictionary* resp = [responseArray objectAtIndex:0];
于 2012-12-18T15:47:08.963 に答える
0

これを試して:

NSDictionary* resp = [((NSArray *)response) objectAtIndex:0];

それがうまくいくことを願っています

于 2012-12-18T15:45:44.530 に答える