我将 Station 对象定义为:
@interface RFStation : NSObject {
NSString *stationID;
NSString *callsign;
NSString *logo;
@end
我还有一个名为' StationList '的NSMutableArray,它是一个Station对象列表。此列表按“呼号”按字母顺序排序。
我还有另一个名为' generalList '的NSArray,包含字母“A”到“Z”
我想创建一个UITableView,其章节标题A-Z对应于每个呼号的第一个字母。
我目前有这些方法&对象定义:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [generalList count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [generalList objectAtIndex:section];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSPredicate *filter = [NSPredicate predicateWithFormat:@"callsign beginswith[cd] %@",[generalList objectAtIndex:section]];
return [[stationList filteredArrayUsingPredicate:filter] count];
}
当然:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
RFStation *aStation = [stationList ObjectAtIndex:[indexPath row]];
static NSString *identity = @"MainCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identity];
if(cell == nil)
{
cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 0.0) reuseIdentifier:identity] autorelease];
}
cell.text = aStation.callsign;
return cell;
}
然而我的标题似乎没有正确排序NSMutableArray数据。我的代码有什么问题(我怀疑它是谓词)
答案 0 :(得分:0)
您阅读[stationList ObjectAtIndex:[indexPath row]]
。但NSIndexPath对象的行不是整体,而是该部分中的行。您必须实现- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
并返回每个部分的确切行数。所以你必须自己处理哪个单元格在哪个部分。
我更喜欢一个NSDictionary,其字母表中的每个字母都带有一个键,而且它的对象是NSArray与Station对象的对象。