2014-01-14 2 views
0

Так что я получаю эту ошибку -Пользовательского uitablecellview исключения внутренней противоречивости

*** Assertion failure in void _UIPerformResizeOfTextViewForTextContainer(NSLayoutManager *, UIView<NSTextContainerView> *, NSTextContainer *, NSUInteger)(), /SourceCache/UIFoundation_Sim/UIFoundation-258.1/UIFoundation/TextSystem/NSLayoutManager_Private.m:1510 
2014-01-13 18:58:55.829 ReviewApp[1678:3c03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only run on the main thread!' 
*** First throw call stack: 

Ошибка apparent..but Я не знаю, почему это происходит. Это, как я регистрируя перо -

UINib* dqNib = [UINib nibWithNibName:@"DQCardView" bundle:nil]; 
UINib* simpleListNib = [UINib nibWithNibName:@"SimpleListCell" bundle:nil]; 
UINib* photoPostNib = [UINib nibWithNibName:@"PhotoPostCell" bundle:nil]; 
[self.listView registerNib:dqNib forCellReuseIdentifier:DQCellIdentifier]; 
[self.listView registerNib:simpleListNib forCellReuseIdentifier:SimpleListCellIdentifier]; 
[self.listView registerNib: photoPostNib forCellReuseIdentifier:ListPhotoPostIdentifier]; 

в моем cellForRowAtIndexPath, я делаю это (мой код довольно долго, поэтому я кратко) -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    DQCell* dqCell; 
    SimpleListCell* listCell; 
    PhotoPostCell* photoCell; 

    if(condition1){ 
     listCell = [self.listView dequeueReusableCellWithIdentifier:SimpleListCellIdentifier]; 
     //do other stuff  
     return listCell; 
    } else { 
     dQcell = [self.listView dequeueReusableCellWithIdentifier: DQCellIdentifier]; 
     //do other stuff   
     return dQcell; 
    } 

} 

Линия listCell дает я исключение ... но линия Dqcell не делает.

Кроме того, в реализации listCell я не изменяю размер текста в любом месте. Так что же происходит? Что я должен проверять?

ответ

0

Основываясь на ошибке, вы получаете «NSInternalInconsistencyException», причина: «Выполняется только по основному потоку!», Я бы предположил, что где-то в вашем коде относительно изменения размера UITextView вы делаете что-то из фона нить?

Каждый раз, когда я когда-либо делаю что-то в фоновом потоке, например, асинхронно отправляя HTTP-запрос на сервер, и я хочу отображать что-то в этом фоновом потоке, например, всплывать с alertView с ошибкой Я обернуть этот код в следующем:

dispatch_sync(dispatch_get_main_queue(), ^{ 

}); 

в основном это говорит ОС, чтобы сделать все, что в этом блоке на главном потоке. В случае, когда я появляюсь с предупреждением в фоновом потоке, и когда я забыл сделать это, приложение в основном блокируется в течение некоторого периода времени, казалось бы, сломанного и случайным образом в более позднее время, обычно 6 или Через 7 секунд на экране появляется предупреждение, и приложение снова можно использовать. Простое эмпирическое правило: не делайте НИЧЕГО UI, связанного с фоновым потоком.

В вашем случае, не глядя на весь проект, я не знаю точно, что вызывает проблему. Надеюсь, я дал вам достаточно информации, чтобы помочь!

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