将NSObject转换为NSArray

时间:2012-12-18 15:43:49

标签: objective-c ios casting

我正在使用最新的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?

3 个答案:

答案 0 :(得分:2)

tutorial解释了我必须使用id response =代替NSObject* response =的原因。

如果我使用id,我可以向response对象发送任何消息。

所以,如果我检查[response isKindOfClass:[NSArray class]]是否[response objectAtIndex:0],那么{{1}}就不会有任何问题。

而且,它不会是任何编译时错误。

我添加了这个答案,因为会有更多人遇到同样的问题。

答案 1 :(得分: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];

答案 2 :(得分:0)

试试这个:

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

希望它有效