2013-03-26 2 views
-1

Следующий код сводит меня с ума:NSArray приходит утратившим в то время как объект имеет значение

-(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); 
} 

Так что, если я раскомментировать первую строку для цикла, он печатает все города. если я печатаю NSArray, он показывает null. Оба определены в файле .h так же, как и событияTitles и eventsCity. Что может быть неправильным?

Спасибо за помощь

+0

Вы никогда не создавали 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); 
} 
+0

Они определены в файлах заголовков. EventTitles работает нормально. только город не –

+0

@sys_debug - «определенный» не «создан». –

+0

Я не спрашиваю, были ли они определены, я спрашиваю, были ли они выделены и инициализированы. –

0

вы инициализировать self.eventsCity и self.eventsTitles, как пустой NSMutableArray s? Просто объявляя их как @properties, они оставляют их как `nil.

Вы также должны ссылаться на них не как переменные экземпляра, а как self.arrayName. Вы можете сделать ленивый экземпляр, что, как хорошо, так что вы не имеете эту проблему =)

EDIT: Добавление ленивой коды создания экземпляра, так у вас есть пример того, что я имел в виду:

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

Используя это, создаст пустой массив для вас, если вы еще не сделали его в любое время, когда вы ссылаетесь self.eventsCity

Смежные вопросы