-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];但我认为它会创建两个对象并且会浪费资源。

如何将 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 回答