我有一个 UITableViewController 订阅来自默认通知中心的通知。在为处理通知而定义的方法中,我创建了一个用于我的 tableview 数据源方法的排序数组。问题是 UITableVIew 显示的每个单元格都包含排序数组的最后一个条目,所以如果排序数组有 A、B、C,我会得到一个带有 C、C、C 的表......我无法弄清楚这一点,因为我使用该排序数组并将其中的每个对象放入字典中,如下所示:
NSDictionary *dict = [self.sortedbirthdays objectAtIndex:indexPath.row];
然后我使用该字典的键添加到单元格标签。我确信这是我的逻辑错误,但我看不到它。任何帮助将不胜感激。
-(void)handleNotification:(NSNotification *)notification
{
[self.birthdays addObject:[notification userInfo]];
NSLog(@" unsorted %@", self.birthdays);
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name"
ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
self.sortedbirthdays = [self.birthdays sortedArrayUsingDescriptors:sortDescriptors];
NSLog(@" sorted %@", self.sortedbirthdays);
[self.tableView reloadData];
}
这是我的数据源方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.sortedbirthdays count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath
{
NSDictionary *dict = [self.sortedbirthdays objectAtIndex:indexPath.row];
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
NSLog(@"sorted birth day length %d", [self.sortedbirthdays count]);
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
NSLog(@"calling cell for row at indexpath with %@:", dict);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM-dd-yyyy"];
NSString *dateString = [dateFormatter stringFromDate:[dict valueForKey:@"date"]];
UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(160, 8.0, 124, 28)];
[ dateLabel setFont:[UIFont boldSystemFontOfSize:12.0]];
[ dateLabel setTextAlignment:NSTextAlignmentRight];
[ dateLabel setTextColor:[UIColor whiteColor]];
[ dateLabel setAutoresizingMask:(UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight)];
dateLabel.tag = 1;
dateLabel.text = dateString;
// Add Main Label to Content View
[cell.contentView addSubview:dateLabel];
cell.contentView.backgroundColor = [UIColor randomColor];
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.text = [dict valueForKey:@"name"];
}
return cell;
}