实现sortedArrayUsingSelector后的tableView错误

时间:2011-04-16 17:54:49

标签: objective-c

我有一个问题,由于某种原因,我无法自己解决。

我所拥有的是从数组加载的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 

我的一切工作正常,对于我的表格部分我使用sectionsArray.count

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

和cell.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;

也可以。

我遇到的问题是加载的文件不按字母顺序排列,因此我的数组不是按字母顺序排列的。我对此问题的解决方案是将文件加载到临时数组中,对其进行排序,然后使用以下简单代码将其分配给sections数组:

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

由于某种原因,在这个简单的tweek之后,当程序试图确定部分中的行数或单元格textLabel看到图片文件(http://img846.imageshack.us/i/screenshot20110416at141.png/)时,其他任何函数都无法访问我获得EXC_BAD ACCESS。我无法弄清楚为什么会发生这种情况,因为变量是全局的,当我为sectionsArray.count执行NSLog时,它会打印正确的值。

任何帮助都会非常感激。谢谢!!

1 个答案:

答案 0 :(得分:1)

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

这将导致自动释放的数组。你可以保留它。

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

一般情况下,我建议使用sectionsarray的属性(非原子,保留)..那么这是你的代码:

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

最诚挚的问候, 基督教