Я имею дело с проблемой, которая сводит меня с ума. Я просмотрел другие форумы, и мой код выглядит нормально, однако он не работает при вызове метода addObject для NSMutableArray. Я реализую простой XML-класс анализатора и хранить часть информации в NSMutableArray:addObject для сбоев NSMutableArray!
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if([elementName isEqualToString:@"Image"]){
[images setObject: [[imageFile copy] autorelease] forKey: [NSNumber numberWithInt: imageId]];
return;
}
if([elementName isEqualToString:@"Annotation"]){
//Here create the annotation object
Annotation *newAnnot = [[Annotation alloc] init];
newAnnot.imageId = imageId;
newAnnot.annDescription = [[annDescription copy] autorelease];
newAnnot.annLocation = [[annLocation copy] autorelease];
[annotations addObject: newAnnot];
[newAnnot release];
return;
}
if([elementName isEqualToString: @"Patient"] || [elementName isEqualToString: @"Images"] || [elementName isEqualToString: @"Annotations"]){
[currentSection setString: @""];
}else {
[currentElement setString: @""];
}
}
[аннотаций AddObject: newAnnot] делает заявку на получение сигнала SIGABRT!
2010-11-08 17:15:00.786 Touches[1430:207] *** -[NSCFDictionary addObject:]: unrecognized selector sent to instance 0x4b1bb50 2010-11-08 17:15:00.788 Touches[1430:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFDictionary addObject:]: unrecognized selector sent to instance 0x4b1bb50' 2010-11-08 17:15:00.789 Touches[1430:207] Stack: (
42174544,
43332396,
42183259,
41645686,
41642482,
18858,
39384333,
70873863,
70897681,
39381417,
17100,
8863,
2234926,
38538931,
38537114,
2234111,
38538931,
38544407,
38545466,
38538931,
38537114,
2230794,
2239193,
103026,
108372,
134462,
115959,
147928,
44216700,
41453724,
41449640,
107041,
140146,
8296) terminate called after throwing an instance of 'NSException' Program received signal: “SIGABRT”. (gdb) continue Program received signal: “SIGABRT”.
Вот краткое описание кода:
Аннотация простой класс, производный от NSObject. Я реализую методы init и dealloc. Первый один не делает ничего, просто возвращает «я», тогда как dealloc вызывает родитель и высвобождает 2 струны
@interface Annotation : NSObject {
int imageId;
NSString *annDescription;
NSString *annLocation;
}
@property (nonatomic, assign) int imageId;
@property (nonatomic, retain) NSString *annDescription;
@property (nonatomic, retain) NSString *annLocation;
ничего странного, пока здесь. Тогда взгляните на класс, реализующий синтаксический анализ:
@interface PatientBundle : NSObject <NSXMLParserDelegate> {
//............
NSMutableArray *annotations;
//.............
}
@property (nonatomic, retain) NSMutableArray *annotations;
Мой метод инициализации выглядит следующим образом:
- (id) initFromFile: (NSString*)pathToFile{
//.....
annotations = [[NSMutableArray alloc] initWithCapacity: 10];
[addressParser setDelegate:self];
//......
}
Debugging предлагает объект я добавляю в «аннотации» массив не ноль, однако Я не могу даже вставить первый. Почему я получаю исключение NSInvalidArgumentException? Почему NSCFDictionary: addObject, если мой массив относится к классу NSMutableArray? Что-нибудь об использовании NSMutableArray, которое мне не хватает?
Мои данные платформы: - Запуск iPhone Simulator версии 4.1 (225) - Base SDK и цель развертывания: iOSDevice 4,1 (цель) IPAD - НКУ 4,2
Любой ключ будет любезно оценены. Заранее спасибо.
Луис
Все, что происходит, не видно из кода, который вы опубликовали. Как-то «аннотации» представляют собой NSDictionary вместо массива; скорее всего, указатель переписывается. –
Ваше свойство аннотаций - это чтение/запись, а не только то, что я ожидал бы для mutableArray, созданного в init класса. Зачем? Может быть, вы случайно назовете сеттера где-нибудь? –