对象属性不会在cellForRowAtIndexPath中加载

时间:2013-08-26 18:25:18

标签: ios objective-c cocoa-touch

我有一个UITableViewController,它使用AFNetworking从数据源加载单元格。数据加载异步,所以我设置一个通知来加载新数据时更新我的​​tableView。每次新数据到达时都会调用reloadTable并更新我的Object属性,但这些属性不会加载到我的cellForRowAtIndexPath中。

当我在重装表中NSLog我的属性时,它们是正确的。但是我的cellForRowAtIndexPath

中的null

这是我的代码......

这会创建一个Object'shift'并开始加载数据,然后在加载新数据时接收一个notif并更新表

NSDictionary *params = @{@"game_id":self.gameID, @"player_id":_sharedPlayer.playerID, @"category_id":self.categoryID};

 _shifts = [[ClipShiftController alloc] init];
[_shifts fetchShifts:params];

[[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(reloadTable:)
                                              name:@"clipLoaded"
                                            object:nil];

这是我的reloadTable:

- (void)reloadTable:(NSNotification *)notif
{
    [self.tableView reloadData];
    Clip *clip = [self.shifts.shiftDataSet objectAtIndex:i];
    NSLog(@"clip counter %i",[self.shifts.shiftDataSet count]);
    NSLog(@"clip name %@",clip.name);
    i++;
}

这里是cellForRowAtIndexPath:

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

    Clip *clip = [_shifts.shiftDataSet objectAtIndex:indexPath.row];
    NSLog(@"CELL COUNTER %i",[_shifts.shiftDataSet count]);
    NSLog(@"CLIP CELL name %@",clip.name);
    NSLog(@"row called");

    cell.textLabel.text = @"hello";
    //This is null  cell.textLabel.text = clip.name;

    return cell;
}

这是我的控制台输出

2013-08-26 12:16:50.831 One Six[15632:c07] clip counter 1
2013-08-26 12:16:50.831 One Six[15632:c07] clip name shift
2013-08-26 12:16:50.831 One Six[15632:c07] clip counter 2
2013-08-26 12:16:50.832 One Six[15632:c07] clip name shift
2013-08-26 12:16:50.832 One Six[15632:c07] clip counter 3
2013-08-26 12:16:50.832 One Six[15632:c07] clip name shift
2013-08-26 12:16:50.832 One Six[15632:c07] clip counter 4
2013-08-26 12:16:50.833 One Six[15632:c07] clip name shift
2013-08-26 12:16:50.833 One Six[15632:c07] clip counter 5
2013-08-26 12:16:50.833 One Six[15632:c07] clip name face off
2013-08-26 12:16:50.833 One Six[15632:c07] clip counter 6
2013-08-26 12:16:50.833 One Six[15632:c07] clip name face off
2013-08-26 12:16:50.834 One Six[15632:c07] clip counter 7
2013-08-26 12:16:50.834 One Six[15632:c07] clip name face off
2013-08-26 12:16:50.834 One Six[15632:c07] clip counter 8
2013-08-26 12:16:50.835 One Six[15632:c07] clip name shift
2013-08-26 12:16:50.835 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.835 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.836 One Six[15632:c07] row called
2013-08-26 12:16:50.836 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.836 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.837 One Six[15632:c07] row called
2013-08-26 12:16:50.838 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.838 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.838 One Six[15632:c07] row called
2013-08-26 12:16:50.839 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.839 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.839 One Six[15632:c07] row called
2013-08-26 12:16:50.840 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.840 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.841 One Six[15632:c07] row called
2013-08-26 12:16:50.841 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.841 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.842 One Six[15632:c07] row called
2013-08-26 12:16:50.842 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.844 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.844 One Six[15632:c07] row called
2013-08-26 12:16:50.845 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.845 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.846 One Six[15632:c07] row called

显示的内容是我的表视图中的8行,表示问好。

3 个答案:

答案 0 :(得分:1)

确保在模型对象中使用强而非弱的方式声明属性。没有看到你的代码,我猜这是最可能的问题。在某些情况下,您确实希望使用弱(例如:​​视图控制器中的IBOutlets),但在您拥有拥有其数据的数据对象的情况下则不会。

答案 1 :(得分:-1)

你永远不会分配和初始化var'cell',检查你的代码,var'cell'仍然是nul。

答案 2 :(得分:-2)

我认为因为你混合了ivar(_shifts)和属性(self.shifts)。如果您使用旧版本的Xcode,则必须使用以下代码@synthesize实现部分中的属性:

@synthesize shifts = _shifts;

如果您使用最新版本的Xcode,则无需声明ivar _shifts变量juste使用以下代码声明属性:

@property (nonatomic, retain)  <YourObjectClass>* shifts;

在代码的所有位置都需要使用self.shifts属性而不是ivar变量_shifts