2013-05-30 2 views
1

Я пытаюсь создать XML-парсер, который сохраняет данные из YR.no-API. Парсер должен добавить данные к этим двум структурам данных. Моя проблема в том, когда я пытаюсь добавить WeatherTimeData объекта в мой массив в WeatherData, похоже, объекты не получает добавленные, следующий отсчет всегда дает мне нольДобавление объектов в массив NSXMlParser Нет данных

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
     if ([elementname isEqualToString:@"time"]) 
     { 

    [self.weatherdata.timedata addObject:currentWeatherTimeData]; 
     NSLog(@"amount of objects in timedata-array %d", [[self.weatherdata timedata] count]); 
} 

Это мои два структур данных, я Alloc weatherData по следующему методу

-(id) loadXMLByURL:(NSString *)urlString 
{ 
    _weatherdata = [[WeatherData alloc] init]; 
    NSURL *url  = [NSURL URLWithString:urlString]; 
    NSData *data = [[NSData alloc] initWithContentsOfURL:url]; 
    parser   = [[NSXMLParser alloc] initWithData:data]; 
    parser.delegate = self; 
    [parser parse]; 
    return self; 
} 

Должен ли я выделять массив внутри объекта weatherdata?

WeatherData.h

@interface WeatherData : NSObject 
@property (strong, nonatomic)NSString *town; 
@property (strong, nonatomic)NSString *country; 
@property (strong, nonatomic)NSMutableArray *timedata; 
@end 

WeatherData.m

@implementation WeatherData 
@synthesize town = _town; 
@synthesize country = _country; 
@synthesize timedata = _timedata; 
@end 

WeatherTimeData.h

@interface WeatherTimeData : NSObject 
@property (strong, nonatomic)NSDate *startTime; 
@property (strong, nonatomic)NSDate *endTime; 
@property (strong, nonatomic)NSString *iconSymbol; 
@property (strong, nonatomic)NSString *windDirection; 
@property (strong, nonatomic)NSString *windSpeed; 
@property (strong, nonatomic)NSString *temprature; 
@property (strong, nonatomic)NSString *preassure; 
@end 

WeatherTimeData.m

@implementation WeatherTimeData 
@synthesize startTime = _startTime; 
@synthesize endTime = _endTime; 
@synthesize iconSymbol = _iconSymbol; 
@synthesize windDirection = _windDirection; 
@synthesize windSpeed = _windSPeed; 
@synthesize temprature = _temprature; 
@synthesize preassure = _preassure; 
@end 

ответ

1

Этот тип проблемы является классическим, потому что объект не был выделен, и данный Objective-C позволяет отправлять сообщения на nil, который не замечает программист.

Я думаю, что было бы неплохо, чтобы быть в состоянии обеспечить переменную среды выполнения, когда такие события записываются на стандартный вывод ...

Я подозреваю, что [WeatherTimeData init] не создает timedata и это потому, что вы не имеете обеспечил ее реализацию; просто использовать @sythensize недостаточно для создания объектов.

+0

Хорошо, поэтому мне нужно написать собственный метод init, который выделяет память для этого объекта? –

+0

@TobiasOlofsson Да, это правильно. – trojanfoe

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