tvOS UITableView在Apple TV上导致错误,但模拟器

时间:2015-11-11 19:34:15

标签: objective-c uitableview tvos apple-tv

我的控制器上有一个UITableView。当控制器显示页面时,它处于焦点。

当焦点行发生变化时,我想在下面的代码中更新UITextView(称为_appText)。

这一切在模拟器中运行良好,但是当我在Apple TV上运行时,我收到以下错误:

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因是:'_ignoreFocusUpdateIfNeeded在焦点更新开始时永远不应该为YES。'

我正在Apple TV上运行tvOS版本9.01

以下是代码:

- (void)tableView:(UITableView *)tableView didUpdateFocusInContext(UITableViewFocusUpdateContext *)contextwithAnimationCoordinator:(UIFocusAnimationCoordinator*)coordinator{
NSInteger ourRow=context.nextFocusedIndexPath.row;

NSString *path =[[NSBundle mainBundle] pathForResource:[_appIconNames objectAtIndex:ourRow] ofType:@"html"];
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];

NSAttributedString *thisString=[[NSAttributedString alloc] initWithData:[content dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}documentAttributes:nil error:nil];
_appText.attributedText=thisString;
}

导致错误的行是:

NSAttributedString *thisString=[[NSAttributedString alloc] initWithData:[content dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}documentAttributes:nil error:nil];

无法弄清楚它在模拟器中的作用,而不是Apple TV本身。

3 个答案:

答案 0 :(得分:1)

试试这个:

<强>目标-C:

dispatch_async(dispatch_get_main_queue(), ^{
   _appText.attributedText=thisString;
}

<强>夫特:

dispatch_async(dispatch_get_main_queue()) {
   _appText.attributedText = thisString
}

答案 1 :(得分:0)

我相信这是您正在寻找的答案: 不知道为什么需要这个,但我遇到了同样的问题,这确实解决了...... 从Banana的借来,真正的问题是字符串的转换,而不是转让。

dispatch_async(dispatch_get_main_queue(), ^{
    NSAttributedString *thisString=[[NSAttributedString alloc] initWithData:[content dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}documentAttributes:nil error:nil];
});

答案 2 :(得分:0)

Swift 3

DispatchQueue.main.async {
   _appText.attributedText = thisString
}