如何按字母顺序为UITableViewCell排序对象?

时间:2015-03-01 14:38:20

标签: ios objective-c uitableview nsmutablearray nsobject

我想对我创建的对象进行排序&存储在NSMutableArray的{​​{1}}中。   电台为AppDelegate.m班级

我想按字母顺序(NSObject)&中的另一个UIViewController显示电台名称当我点击它们时,我想将包含电台名称,纬度,经度的对象传递给下一个UITableViewCell

目前我已将站名从stationList(全局UIViewController)提取到NSMutableArray的Cell&上的另一个NSMutableArray。通过

排序
UIViewController

但是当调用didSelectRowAtIndexPath时,我必须从cell&在stationList数组中搜索它以传递lat,long我认为这不好。

stationList Array Log(它有100个对象): -

[sortedArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

建议我这方面的良好做法/方法,或者使用词典?

2 个答案:

答案 0 :(得分:1)

我在这里看到两个解决方案:

1)您可以根据stationList

indexPath.row检索对象
- (void) tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
    Stations* station = stationsList[indexPath.row];
    ...
}

2)您可以创建自定义UITableViewCell并在那里存储引用的对象:

@interface StationCell : UITableVIewCell
    @property(weak) Stations* station;
@end

...

- (UITableViewCell*) tableView:(UITableVIew*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
     StationCell* cell;

     // dequeue StationCell
     ...

    cell.station = stationList[indexPath.row]; 
}

...


- (void) tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
    StationCell* cell = [tableView cellAtIndexPath:indexPath];
    Stations* station = cell.station;
    ...
}

我会根据单元格中显示的数据复杂性选择解决方案 - 使用自定义UITableViewCell可以让机会将单元格的配置从视图控制器移动到单元格实现。

修改

就排序stationsList而言,您可以使用例如:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
stationsList = [stationsList sortedArrayUsingDescriptors:@[sort]];

答案 1 :(得分:1)

我建议不要对与数组stationList分开的站名数组进行排序。相反,如果您只想在表视图中更改oder并需要在其他地方维护其他顺序,我建议对您的stationList进行排序(或其副本)

有一些方法,如sortUsingComparator:将比较器块作为参数。您编写了一个比较数组中2个元素的块,该方法使用该块来确定对象的排序并对数组进行排序。在你的情况下,它只是编写一个比较2站对象的名称属性的块。