У меня проблемы с получением NSMutableArray для работы. Я упростил код для иллюстрации моей проблемы. У меня есть класс, который я использую в качестве контейнера данных.
@interface Question : NSObject {
int questionID;
NSString* text;
}
@property int questionID;
@property(nonatomic,retain)NSString* text;
@end
Я создаю различные экземпляры этого контейнера следующим образом:
.h
#import "Question.h"
@interface testViewController : UIViewController {
NSMutableArray* questions;
}
-(IBAction) start;
.m
....
- (void)viewDidLoad {
[super viewDidLoad];
questions=[[NSMutableArray alloc]init];
for (int i=0; i<5; i++) {
int questionID=i;
Question* question=[[Question alloc]init];
question.questionID=questionID;
question.text=[NSString stringWithFormat:@"text %d",i];
[questions addObject:question];
[question release];
}
}
..........
-(IBAction) start{
for (int i=0; i<[questions count]; i++) {
Question *theQuestion;
theQuestion=(Question*)[questions objectAtIndex:i];
NSLog(@"%d",theQuestion.questionID);
NSLog(@"%@",theQuestion.text);
NSLog(@"----------------------");
}
}
В ViewDidLoad экземпляры вопроса создаются в цикле и добавляются в вопросы NSMutableArray. После того, как вопрос был добавлен, он освобождается. После заполнения NSMutableArray запуск функции выполняется нажатием кнопки на пользовательском интерфейсе. Эта функция должна распечатывать содержание различных вопросов.
Проблема заключается в том, что при запуске функции в вопросах NSMutableArray ранее не сохранялось содержимое, и программа вылетала при
NSLog(@"%d",theQuestion.questionID);
Интересно то, что если я не отпущу вопрос по функции viewDidLoad, то все работает нормально. Однако, я бы пропустил освобождение ранее выделенной переменной, и это должно привести к утечке.
У кого-нибудь есть идеи, как это сделать правильно?