我有一个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行,表示问好。
答案 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