以下代码让我发疯:
-(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。可能有什么不对?
感谢您的帮助
答案 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.eventsCity
和self.eventsTitles
初始化为空NSMutableArray
?简单地将它们声明为@properties
会将它们保留为“无”。
您也应该将它们作为实例变量引用,而不是self.arrayName
。你可以这样做懒惰的实例化,所以你没有这个问题=)
编辑:添加延迟实例化代码,以便您有一个我的意思的例子:
- (NSMutableArray)eventsCity
{
if (_eventsCity == nil)
_eventsCity = [[NSMutableArray alloc] init];
}
return _eventsCity;
}
使用此功能,如果您在引用self.eventsCity
的任何时候尚未创建一个空数组,它将为您创建一个空数组