Проблема с NSArray - PullRequest
0 голосов
/ 26 июня 2011

у меня есть следующий код

@interface TestYourInfoViewController : UIViewController {
IBOutlet UIImageView * questionImage;
NSArray *historyQuestions;
int questionHistoryNo;

}
@property(nonatomic,retain) UIImageView * questionImage;

@property(nonatomic,retain) NSArray *historyQuestions;
@property int questionHistoryNo;
-(IBAction)solution:(id)sender;

@end




    - (void)viewDidLoad
{
    NSArray* array = [[NSArray alloc]init];
    historyQuestions = array;
    historyQuestions=UmRandomOrder(49, 1, 0);



     questionImage.image = [UIImage imageNamed:[NSString stringWithFormat:@"h%@.jpg",[self.historyQuestions objectAtIndex:0]]];
    [array release];
     [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}


-(IBAction)solution:(id)sender{

     questionHistoryNo= questionHistoryNo+1;
    questionImage.image = [UIImage imageNamed:[NSString stringWithFormat:@"h%@.jpg",[self.historyQuestions objectAtIndex:questionHistoryNo]]];


}

когда я нажимаю кнопку действия, это дает мне исключение в строке [self.historyQuestions objectAtIndex: questionHistoryNo]

Я верю, что проблема в nsarray как-то, но я не знаю, что это .. исключение кто-нибудь может мне помочь ..

1 Ответ

2 голосов
/ 27 июня 2011

На самом деле у DarkDust все правильно: исходный код для UMRandomOrder показывает, что он правильно возвращает авто-релиз NSMutableArray. Итак, просто измените первые три строки вашего viewDidLoad с:

NSArray* array = [[NSArray alloc]init];
historyQuestions = array;
historyQuestions=UmRandomOrder(49, 1, 0);

просто:

  self.historyQuestions=UmRandomOrder(49, 1, 0);

И все будет хорошо.

Если говорить точнее, нет необходимости выделять / инициализировать / назначать массив, который вы собираетесь перезаписать, и с помощью установщика свойств (self.historyQuestions =) вы также автоматически сделаете правильное сохранение как избежать потенциальной утечки памяти. Это также объясняет, почему он работает в viewDidLoad (автоматически выпущенный UmRandomOrder все еще действует), но не в кнопке действия (с тех пор он был выпущен).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...