我有一个NavigationController来控制我的VC。
VCA是rootViewController。
VCB是带有tableView的viewController。
CustomCell是一个自定义类,我从UITableViewCell继承了一个内置的xib文件,并且VCB使用带有CustomCell的委托函数和AFNetworking类来初始化单元格,如下所示:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    NSString *url=[NSString stringWithFormat:@"%@%@",testPath,urlString];
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
    [manager POST:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        dataList=responseObject;
        NSLog(@"af get data");
        NSLog(@"%@",[[dataList objectAtIndex:0]objectForKey:@"age"]);
        [self.tableViewList reloadData];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error:%@",error);
    }];

}
return self;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier=@"RecommendTableCellIdentifier";
static BOOL nibsRegistered = NO;
if (!nibsRegistered) {
    UINib *nib = [UINib nibWithNibName:@"RecommendTableCell" bundle:nil];
    [tableView registerNib:nib forCellReuseIdentifier:CellIdentifier];
    nibsRegistered = YES;
}
RecommendTableCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil) {
    cell=[[RecommendTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
dataRow=[dataList objectAtIndex:[indexPath row]];
cell.children=[dataRow objectForKey:@"children"];
if (cell.childrenLabel) {
    NSLog(@"YES");
}else{
    NSLog(@"NO");
}
NSLog(@"cell get data:");
NSLog(@"%@",[dataRow objectForKey:@"age"]);
[cell addContent:dataRow];
[cell.wantToSeeButton setTag:[indexPath row]];
[cell.wantToSeeButton addTarget:self action:@selector(iWantToSeeClicked:) forControlEvents:UIControlEventTouchUpInside];
return cell;


}

CustomCell xib有很多IBOutlet标签。

问题是:
当我推入VCB时,单元格数据正常显示。然后我弹出回到VCA,然后再次推入VCB,这次,单元格数据什么都没有出现。
如您所见,我在代码中上面有很多NSLog检查,所有检查都记录了正确的内容,但cell.childrenLabel记录了NO。看来我第二次进入VCB,IBOutlet childrenLabel尚未启动。
有什么问题,如何解决?非常感谢!

最佳答案

您不应该将您的nibsRegistered变量设为静态。

一旦将该变量设置为YES,它将在程序的整个生命周期中保持YES。当您第二次返回视图时,它认为它已被注册。

您可以添加一个属性,然后使用它,例如:

self.nibsRegistered = YES;


或者,更自然地,在您的viewDidLoad方法中执行注册代码(每个视图控制器实例仅运行一次)。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UINib *nib = [UINib nibWithNibName:@"RecommendTableCell" bundle:nil];
    [tableView registerNib:nib forCellReuseIdentifier:CellIdentifier];
}

10-08 20:03