我的控制器上有一个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本身。
答案 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
}