ios - 所有行中显示的最后一条记录

标签 ios objective-c

我有一个 EventObject 数组。每个对象都有标题和城市以及许多其他属性。我想将单元格的标题显示为事件标题,将单元格的副标题显示为事件城市。我尝试在下面这样做,但我只得到最后一个对象显示 4 次(即数组中对象的数量)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

//    NSDate *object = _objects[indexPath.row];
//    cell.textLabel.text = [object description];

    EventObject *eventInstance = [[EventObject alloc] init];
    int row = [indexPath row];

    eventInstance = eventObjectsArray[row];
    cell.textLabel.text = eventInstance.eventTitle;
    NSLog(@"Event Title: %@", eventInstance.eventTitle);
    cell.detailTextLabel.text = eventInstance.eventCity;

    return cell;
}

我做错了什么?我正在学习 Objective-C 所以初学者肯定会犯错误。谢谢

编辑:这就是我插入对象的方式:

 //get events from database
    eventsDictionary = [eventInstance getEventsObjects];

    //process each key in dictionary and assign to eventInstance
    for(id key in eventsDictionary)
    {
         eventInstance.eventId = [NSString stringWithFormat:@"%@", key[@"id"]];
         eventInstance.eventTitle = [NSString stringWithFormat:@"%@", key[@"title"]];
         eventInstance.eventDescription = [NSString stringWithFormat:@"%@", key[@"description"]];
         eventInstance.eventCity = [NSString stringWithFormat:@"%@", key[@"city"]];
         [eventObjectsArray addObject:eventInstance];
    }

最佳答案

建议

[这可能是问题]

在 eventObjectsArray 中添加对象时,请确保每次添加对象之前都有新的 EventObject 实例

EventObject *eventInstance = [[EventObject alloc] init];
eventInstance.eventTitle = @"your title";
eventInstance.eventCity  = @"your city";
[eventObjectsArray addObject:eventInstance];

[这是建议,因为您应该了解这一点以提高编码标准和内存管理]

当从数组中检索对象时,您实际上不需要拥有自定义对象的实例,而是像这样引用它

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    //EventObject *eventInstance = [[EventObject alloc] init]; //you don't need this
    int row = [indexPath row];

    EventObject *eventInstance = eventObjectsArray[row]; // make reference like this
    cell.textLabel.text = eventInstance.eventTitle;
    NSLog(@"Event Title: %@", eventInstance.eventTitle);
    cell.detailTextLabel.text = eventInstance.eventCity;

    return cell;
}

关于ios - 所有行中显示的最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15663050/

相关文章:

ios - Objective-C - 在屏幕中间画一条水平线

objective-c - Cocoa API 图像处理

iphone - UITextField - 返回 BOOL 的代表崩溃

objective-c - iOS 约束动画没有立即发生

ios - Storyboard - 如何在没有动画和显示屏幕的情况下自动执行转场

iphone - 管理当前位置的缺失

ios - 在 iOS 中使用带有 .xib 文件的多个 View Controller 时尝试使用 UNavigationController 的子类

objective-c - Xcode 6 中未创建 Swift 到 Objective-C header

ios - 如何在 ReactiveCocoa (Swift) 中将 NSError SignalProducer 转换为 NoError SignalProducer

ios - UI 未在 SWRevealViewController viewWillAppear 上更新