当对象具有值时,NSArray将为null

时间:2013-03-26 20:42:02

标签: ios objective-c

以下代码让我发疯:

-(void)fetchEventDetails
{    
    NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://domain.com/ios/read.php"]];
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];


    for(id object in dict){
    //NSLog(@"city : %@",object[@"city"]);
//        NSLog(@"title : %@",object[@"title"]);
//        NSLog(@"description : %@",object[@"description"]);
        [_eventsTitles addObject:object[@"title"]];
        [_eventsCity addObject:object[@"city"]];
    }


    NSLog(@"Array : %@", _eventsCity);
}

因此,如果我取消注释for循环的第一行,它会打印所有城市。如果我打印NSArray,它显示为null。两者都以相同的方式在.h文件中定义,即eventsTitles和eventsCity。可能有什么不对?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您是否在其他地方定义_eventsTitles_eventsCity

试试这个:

-(void)fetchEventDetails
{    
    NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://domain.com/ios/read.php"]];
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];

    _eventsTitles = [[NSMutableArray alloc] init];
    _eventsCity = [[NSMutableArray alloc] init];
    for(id object in dict){
    //NSLog(@"city : %@",object[@"city"]);
//        NSLog(@"title : %@",object[@"title"]);
//        NSLog(@"description : %@",object[@"description"]);
        [_eventsTitles addObject:object[@"title"]];
        [_eventsCity addObject:object[@"city"]];
    }


    NSLog(@"Array : %@", _eventsCity);
}

答案 1 :(得分:0)

您是否将self.eventsCityself.eventsTitles初始化为空NSMutableArray?简单地将它们声明为@properties会将它们保留为“无”。

您也应该将它们作为实例变量引用,而不是self.arrayName。你可以这样做懒惰的实例化,所以你没有这个问题=)

编辑:添加延迟实例化代码,以便您有一个我的意思的例子:

- (NSMutableArray)eventsCity
{
    if (_eventsCity == nil)
       _eventsCity = [[NSMutableArray alloc] init];
    }
    return _eventsCity;
}

使用此功能,如果您在引用self.eventsCity的任何时候尚未创建一个空数组,它将为您创建一个空数组