Ошибки tableView после реализации sortedArrayUsingSelector - PullRequest
0 голосов
/ 16 апреля 2011

У меня проблема, которую я почему-то не могу понять самостоятельно.

У меня есть tableView, который загружается из массива, который загружается из файла.(Я объявил мои массивы как NSArray в заголовочном файле)

NSString *subMenuFileList = [[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"plist"]; // file list name/location
sectionsArray = [[NSArray alloc] initWithContentsOfFile:subMenuFileList];//loading my array with the contents of the file 

У меня все работает нормально, для разделов таблицы я использую sectionArray.count

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return sectionsArray.count; // return number of rows

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

cell.textLabel.text= [sectionsArray objectAtIndex:indexPath.row];// get cell name from the array at row#
return cell;

также отлично работает.

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

NSString *subMenuFileList = [[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"plist"]; // file list name/location
tempArray = [[NSArray alloc] initWithContentsOfFile:subMenuFileList]; 
sectionsArray = [tempArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];// my new sorted array

по какой-то причине после этой простой настройки ни один издругие функции могут получить доступ к EXC_BAD ACCESS, когда программа пытается определить количество строк в разделе или ячейку textLabel, см. файлы изображений (http://img846.imageshack.us/i/screenshot20110416at141.png/).Я не могу понять, почему это происходит, так как переменные являются глобальными, и когда я делаю NSLog для sectionArray.count, он выводит правильные значения.

Любая помощь будет очень признательна.Спасибо !!

1 Ответ

1 голос
/ 16 апреля 2011
sectionsArray = [tempArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

это приведет к автоматическому освобождению массива. Вы можете сохранить его.

sectionsArray = [[tempArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] retain];

В общем, я рекомендую использовать свойство для вашего массива section (nonatomic, retain) .. тогда это ваш код:

NSArray* tempArray = [[NSArray alloc] initWithContentsOfFile:subMenuFileList]; 
self.sectionsArray = [tempArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
[tempArray release];

С наилучшими пожеланиями, Christian

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