Ошибка EXC_BAD_ACCES при перезагрузке содержимого табличного представления - PullRequest
1 голос
/ 13 октября 2011

Как только массив правильно заполнен, когда я вызываю его снова с помощью перезагрузки представления таблицы, первый раз (после очистки) возвращает пустое значение, а последующее выполнение возвращает EXC_BAD_ACCES. Попытка предоставить весь необходимый код ... Спасибо за помощь!

в .h файле:

    @interface userViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {

        NSArray *appData;

        IBOutlet UIActivityIndicatorView *activityIndicator;
        IBOutlet UILabel *status;
        IBOutlet UITableView *mainTable;
        IBOutlet UIBarButtonItem *refresh; 
    }

    @property (nonatomic, retain) UIActivityIndicatorView *activityIndicator;
    @property (nonatomic, retain) UILabel *status;
    @property (nonatomic, retain) UITableView *mainTable;
    @property (nonatomic, retain) UIBarButtonItem *refresh;
    @property (nonatomic, retain) NSArray *appData;

- (IBAction) refresca: (id)sender;

в файле .m, когда выполняется функция requestFinished, appData правильно заполняется.

- (void)requestFinished:(ASIHTTPRequest *)request {
    NSLog(@"%@", [request responseString]);
    [activityIndicator stopAnimating];
    activityIndicator.hidden = YES;

    appData = [[request responseString] componentsSeparatedByString: @"#"]; 

    int x =0;

    while (x<[appData count] - 1)
    {
        NSLog(@"Data = %@",[appData objectAtIndex: x]);
        x = x+1;
    }

}

Тем не менее, после его выполнения, при перезагрузке таблицы, appData кажется пустым, а предыдущее содержимое удалено !!

* * 1010

Ответы [ 4 ]

2 голосов
/ 13 октября 2011

Похоже, что ваша переменная экземпляра appData не сохранена.

РЕДАКТИРОВАТЬ: как уже говорили другие, использование свойства - лучший путь.Это сохранит ваши новые appData, а также освободить ранее назначенные объекты.

Попробуйте изменить:

    appData = [[request responseString] componentsSeparatedByString: @"#"]; 

на:

    self.appData = [[request responseString] componentsSeparatedByString: @"#"]; 
1 голос
/ 13 октября 2011

Ваша проблема в основном лежит здесь

appData = [[request responseString] componentsSeparatedByString: @"#"];

Вы присваиваете автоматически выпущенный объект для appData, что не является правильным способом, поскольку вы не вступаете во владение. Вы также не отказываетесь от прав собственности на ранее сохраненные данные. Вы должны использовать метод установки appData.

self.appData = [[request responseString] componentsSeparatedByString: @"#"];

должно это исправить.

0 голосов
/ 13 октября 2011

Не знаю, является ли это проблемой или нет, скорее всего нет ... Но зачем определять свойство, если вы не используете self.appData? Вы @ synthesize appData?

Когда вы используете свойства, вызов self.property фактически вызывает сгенерированные методы установки и получения, и они работают так, как указано в свойстве. Поэтому, если вы укажете свойство с помощью retain, но назначите возвращаемый массив удобства самой переменной, после цикла обработки событий вспомогательный массив будет автоматически освобожден, а поскольку массив не был сохранен, он будет удален из памяти, потеряв все у вас там было, и что, вероятно, происходит в вашем случае.

0 голосов
/ 13 октября 2011

Вы должны использовать свойство (self.appData):

self.appData = [[request responseString] componentsSeparatedByString: @"#"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...