2013-05-09 1 views
0

использованием addChildViewController методы UITableViewDataSource не не называют ни один из DataSource или делегатов методов Есть ли способ решить эту проблему?с использованием методов addChildViewController UITableViewDataSource не не называют

Bellow Я добавил код родительского контроллера, который вызывает метод addChildViewController. И ржали, что я отправил ребенка ViewController код (Whithout в 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]; 
    } 

ответ

0

РЕШЕННЫЙ!

Я назначил новое представление, которое не содержит uiTable.

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

Просто удалив это, код работает!

0
  1. В родительском коде вы вызываете [[CommentsVC alloc] initWithNibName:@"CommentsVC" bundle:nil restaurant:_resto]; для инициализации контроллера дочернего представления, но в контроллере вашего дочернего представления вы загружаете данные, которые, я полагаю, вы используете для представления таблицы, поэтому возможно, что ваш источник данных будет пустым.

  2. Раньше, чтобы позвонить [((UITableView *)[self.view viewWithTag:kTblComments]) reloadData]; в методе init, табличный вид не initialized.

Поэтому убедитесь, что вы вызываете правильные инициализации методы для вашего контроллера представления ребенка, а также убедитесь, что ваша таблица источника данных не является пустым, и после этого вы можете позвонить [yourTableView reloadData] после инициализации вид таблицы, установите его делегат и добавьте в качестве подвью.

+0

Это не решает проблему. Поскольку он работает, когда я изменяю addChildViewController с помощью uiNavigationController push – Ponja

Смежные вопросы