0

使用 addChildViewController 没有调用 UITableViewDatasource 方法没有数据源或委托方法有没有办法解决这个问题?

下面我添加了调用 addChildViewController 方法的父控制器的代码。在下面,我发布了子 viewController 代码(没有 UIViewTableDatasource)

家长代码:

 self.commentsController = [[CommentsVC alloc] initWithNibName:@"CommentsVC" bundle:nil restaurant:_resto];

    UIView *newview = [[UIView alloc] initWithFrame:self.viewComments.bounds];


    self.commentsController.view = newview;
    self.commentsController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.viewComments addSubview:self.commentsController.view];

    [self addChildViewController:self.commentsController];

子代码

- (id)initWithRestaurant:(Restaurant *)resto{
self = [super init];
if (self) {
    _resto = resto;
    if(resto.reviews.count == 0){
        dispatch_queue_t myQueue = dispatch_queue_create("q_getReviews", NULL);
        dispatch_async(myQueue, ^{
            id resultReviews = [[RestaurantManager sharedInstance] getRestaurantReviews:resto orderBy:[NSNumber numberWithInt:1]];
            dispatch_async(dispatch_get_main_queue(), ^{
                if([resultReviews isKindOfClass:[NSError class]]){
                    NSError *err = (NSError *)resultReviews;
                    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:err.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
                    [alert show];
                }else{
                    self.resto.reviews =  (NSMutableArray *)resultReviews;
                    [((UITableView *)[self.view viewWithTag:kTblComments]) reloadData];
                }
            });
        });
        dispatch_release(myQueue);
    }
}
return self;

}

- (void)viewDidLoad{
[super viewDidLoad];
UITableView *tblComments = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
tblComments.tag = kTblComments;
tblComments.delegate = self;
tblComments.dataSource = self;
[self.view addSubview:tblComments];
  }
4

2 回答 2

0

解决了!

我正在分配一个不包含 uiTable 的新视图。

UIView *newview = [[UIView alloc] initWithFrame:self.viewComments.bounds];
self.commentsController.view = newview;

只需删除它,代码就可以工作!

于 2013-05-10T12:41:13.377 回答
0
  1. 在父代码中,您正在调用[[CommentsVC alloc] initWithNibName:@"CommentsVC" bundle:nil restaurant:_resto];初始化子视图控制器,但在您的子视图控制器中,您正在加载我想您用于表视图的数据,因此您的数据源可能为空。

  2. 现在调用[((UITableView *)[self.view viewWithTag:kTblComments]) reloadData];init 方法还为时过早,表格视图还initialized没有。

因此,请确保您为您的子视图控制器调用正确的 init 方法,并确保您的表视图数据源不为空,然后您可以[yourTableView reloadData]在初始化表视图后调用,将其设置为委托并添加为子视图。

于 2013-05-09T21:42:40.660 回答