ios – ‘NSInternalInconsistencyException’,原因:’只运行在主线程上!错误

所以我知道这个错误的原因,但我并不确定如何解决它.

我有一个TextField,我想不可编辑,但在视图中启用滚动.

这是我如何设置该视图:

- (void)tableView:(UITableView *) tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSDictionary *component = self.resultsTuples[indexPath.row];
    Nsstring* serverUrl = @"http://staging.toovia.com";
    Nsstring* pageLink = component[@"$element"][@"ContactCard"][@"PageLink"];
    Nsstring* recUrl =[Nsstring stringWithFormat:@"%@%@&format=json&fields=summary&fields=session_info",serverUrl,pageLink];

    [AJAXUtils getAsyncJsonWithUrl:(NSURL *)[NSURL URLWithString:recUrl]  callback:^(NSDictionary *returnjson){
        if (returnjson != nil){
            NSLog(@"RETURN JSON : %@",returnjson);
            Nsstring *userPageLink = returnjson[@"Node"][@"SessionInfo"][@"PostingAs"][@"Key"];
            self.detailController.userPageLink = userPageLink;
            self.detailController.nodePage = returnjson[@"Node"][@"Key"];
            Nsstring *selectedCard = component[@"$element"][@"Title"];
         //   [self.detailController setDescription:component[@"element"][@"ContactCard"][@"Description"]];
            [self.detailController setPageTitle:selectedCard];
            Nsstring* photoUrl = component[@"$element"][@"ContactCard"][@"Cover"][@"Medium"][@"Link"];
            [self.detailController setRestaurantimage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:photoUrl]]]];



            self.detailController.title = selectedCard;

            Nsstring* rating = component[@"$element"][@"Summary"][@"Averagerating"];
            self.detailController.rating =(NSInteger)rating;
            [self.navigationController pushViewController:self.detailController animated:YES];
        }
    }];

这是viewWillAppear代码的视图:

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear: animated];
    self.rateView.notSelectedStar =[UIImage imageNamed:@"star-off.png"];
    self.rateView.fullSelectedStar = [UIImage imageNamed:@"star-on.png"];
    self.rateView.rating = self.rating;
    self.rateView.editable = YES;
    self.rateView.maxrating = 5;
    self.rateView.delegate = self;
    _pageTitleLabel.text = _pageTitle;
    _pagescoreLabel.text = _pagescore;
    _trendingImageView.image = [UIImage imageNamed:@"trending.png"];
    _restaurantimageView.image = _restaurantimage;

}

完整的错误是 –

2013-12-16 01:22:50.362 ReviewApp[7332:441f] *** Assertion failure in void _UIPerformResizeOfTextViewForTextContainer(NSLayoutManager *,UIView<NSTextContainerView> *,NSTextContainer *,NSUInteger)(),/SourceCache/UIFoundation_Sim/UIFoundation-258.1/UIFoundation/TextSystem/NSLayoutManager_Private.m:1510
2013-12-16 01:22:50.365 ReviewApp[7332:441f] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException',reason: 'Only run on the main thread!'

所以我猜这是因为调整大小的文本字段(内容设置)必须发生在主线程上.如何强制此事发生/抑制此错误?我没有控制文本字段调整大小吗?

谢谢

解决方法

我猜测AJAXUtils的回调发生在后台线程上.我不知道这是否是你的代码,但是你应该在主线程上执行所有的UI操作(例如在标签中设置文本,在图像视图中设置图像,推视图控制器).
dispatch_sync(dispatch_get_main_queue(),^{
    /* Do UI work here */
});

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...