- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个管理 UICollectionView 的 viewController。我有一个从 cellForItemAtIndexPath 调用的辅助方法,它为单元格中的标签提供 NSAttributedString 。辅助方法从 html 字符串格式化 NSAttributedString。当移动到后台时,应用程序将会崩溃,但前提是 indexPath.item 大于 1。换句话说,我可以退出应用程序,而不会从第一个或第二个单元格崩溃,但会在第三个、第四个单元格上持续崩溃。 ..细胞。
这是我的辅助方法和堆栈跟踪。知道为什么我退出应用程序时崩溃吗?
#pragma mark - === Utility Methods === -
- (NSAttributedString *)stepDescriptionStringForIndexPath:(NSIndexPath *)indexPath {
NSString *headerString;
NSString *htmlString;
NSString *categoryString = [NSString stringWithFormat:@"Category: %@", self.knot.category.categoryName];
NSString *abokString = [NSString stringWithFormat:@"ABOK #: %@", self.knot.abokNumber];
NSMutableString *activitiesString = [NSMutableString stringWithCapacity:10];
[activitiesString appendString:@"Activities: "];
// build a string of activities to append to the description html
NSArray *activities = [self.knot.activities allObjects];
if ([activities count] > 0) {
int counter = 1;
for (Activity *activity in activities) {
[activitiesString appendString:activity.activityName];
if (counter < [activities count]) {
[activitiesString appendString:@", "];
}
counter ++;
}
}
// build an HTML string by concatinating the activities to the step description
// and add the header string
if(indexPath.item > 0){
Step *step = (Step *)self.steps[indexPath.item - 1];
headerString = [NSString stringWithFormat:@"Step %ld of %lu", (long)indexPath.item, (unsigned long)[self.steps count]];
htmlString =[NSString stringWithFormat:@"<p>%@</p>%@", headerString, step.stepDescription];
} else {
headerString = @"Overview";
htmlString = [NSString stringWithFormat:@"<p>%@</p>%@<p>%@</br>%@</br>%@</p>", headerString, self.knot.knotDescription, categoryString, abokString, activitiesString];
}
// convert the html string to an attributed string
NSMutableAttributedString *attrStringFromHTML = [[NSMutableAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding]
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]}
documentAttributes:nil
error:nil];
// set the font for the body
NSRange totalRange;
totalRange.location = 0;
totalRange.length = attrStringFromHTML.length;
[attrStringFromHTML addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16] range:totalRange];
// set the font for the header
NSString *temp = [attrStringFromHTML string];
NSRange headerRange = [temp rangeOfString:headerString];
NSRange categoryRange = [temp rangeOfString:categoryString];
NSRange abokRange = [temp rangeOfString:abokString];
NSRange activitiesRange = [temp rangeOfString:activitiesString];
[attrStringFromHTML addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:18] range:headerRange];
//set the font for the activities paragraph
if(indexPath.item == 1){
[attrStringFromHTML addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12] range:categoryRange];
[attrStringFromHTML addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12] range:abokRange];
[attrStringFromHTML addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12] range:activitiesRange];
}
return attrStringFromHTML;
}
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unexpected start state'*** First throw call stack:( 0 CoreFoundation 0x00000001131aad85 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x0000000112c1edeb objc_exception_throw + 48 2 CoreFoundation 0x00000001131aabea +[NSException raise:format:arguments:] + 106 3 Foundation 0x0000000110b96e1e -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 169 4 UIKit 0x00000001113a7d4e _prepareForCAFlush + 256 5 UIKit 0x00000001113b40b4 _beforeCACommitHandler + 12 6 CoreFoundation 0x00000001130cfc37 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 7 CoreFoundation 0x00000001130cfba7 __CFRunLoopDoObservers + 391 8 CoreFoundation 0x00000001130c511c CFRunLoopRunSpecific + 524 9 UIFoundation 0x000000011a697a7a -[NSHTMLReader _loadUsingWebKit] + 2093 10 UIFoundation 0x000000011a698e74 -[NSHTMLReader attributedString] + 22 11 UIFoundation 0x000000011a6323c0 _NSReadAttributedStringFromURLOrData + 5623 12 UIFoundation 0x000000011a630d34 -[NSAttributedString(NSAttributedStringUIFoundationAdditions) initWithData:options:documentAttributes:error:] + 115 13 WhatKnotToDo 0x000000010e84d3ac -[CSC_iPad_KnotDetailViewController stepDescriptionStringForIndexPath:] + 2476 14 WhatKnotToDo 0x000000010e84c31d -[CSC_iPad_KnotDetailViewController collectionView:cellForItemAtIndexPath:] + 477 15 UIKit 0x0000000111bff08f -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:] + 483 16 UIKit 0x0000000111c02d96 -[UICollectionView _updateVisibleCellsNow:] + 4988 17 UIKit 0x0000000111c07575 -[UICollectionView layoutSubviews] + 258 18 UIKit 0x0000000111442980 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703 19 QuartzCore 0x0000000112af6c00 -[CALayer layoutSublayers] + 146 20 QuartzCore 0x0000000112aeb08e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 21 QuartzCore 0x0000000112aeaf0c _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 22 QuartzCore 0x0000000112adf3c9 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277 23 QuartzCore 0x0000000112b0d086 _ZN2CA11Transaction6commitEv + 486 24 UIKit 0x0000000111394a0b __65-[UIApplication _beginSnapshotSessionForScene:withSnapshotBlock:]_block_invoke2222 + 601 25 UIKit 0x0000000111395201 __65-[UIApplication _performSnapshotsWithAction:forScene:completion:]_block_invoke2243 + 131 26 FrontBoardServices 0x00000001153e3039 -[FBSSceneSnapshotAction _finishAllRequests] + 65 27 FrontBoardServices 0x00000001153e2de3 -[FBSSceneSnapshotAction executeRequestsWithHandler:completionHandler:expirationHandler:] + 218 28 UIKit 0x0000000111395024 __65-[UIApplication _performSnapshotsWithAction:forScene:completion:]_block_invoke + 305 29 UIKit 0x0000000111394592 -[UIApplication _beginSnapshotSessionForScene:withSnapshotBlock:] + 1138 30 UIKit 0x0000000111394eb2 -[UIApplication _performSnapshotsWithAction:forScene:completion:] + 629 31 UIKit 0x0000000111394bbc -[UIApplication _handleSnapshotAction:forScene:completion:] + 153 32 UIKit 0x0000000111390a8f __102-[UIApplication _handleApplicationDeactivationWithScene:shouldForceExit:transitionContext:completion:]_block_invoke1993 + 290 33 UIKit 0x0000000111390657 __102-[UIApplication _handleApplicationDeactivationWithScene:shouldForceExit:transitionContext:completion:]_block_invoke1979 + 1258 34 UIKit 0x0000000111393f62 _runAfterCACommitDeferredBlocks + 317 35 UIKit 0x00000001113a7e4c _cleanUpAfterCAFlushAndRunDeferredBlocks + 95 36 UIKit 0x00000001113b4147 _afterCACommitHandler + 90 37 CoreFoundation 0x00000001130cfc37 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 38 CoreFoundation 0x00000001130cfba7 __CFRunLoopDoObservers + 391 39 CoreFoundation 0x00000001130c57fb __CFRunLoopRun + 1147 40 CoreFoundation 0x00000001130c50f8 CFRunLoopRunSpecific + 488 41 GraphicsServices 0x0000000115203ad2 GSEventRunModal + 161 42 UIKit 0x0000000111387f09 UIApplicationMain + 171 43 WhatKnotToDo 0x000000010e820b7f main + 111 44 libdyld.dylib 0x000000011396592d start + 1 45 ??? 0x0000000000000001 0x0 + 1)libc++abi.dylib: terminating with uncaught exception of type NSException
最佳答案
我也遇到过这个问题,几个小时后,我找到了解决方案。
您只需要包装将 NSAttributedString
转换为dispatch_async 的代码即可。
例如:
DispatchQueue.MainQueue.DispatchAsync(() =>
{
var encodingData = ((NSString)html).Encode(NSStringEncoding.Unicode, true);
NSAttributedString data = new NSAttributedString(
encodingData,
new NSAttributedStringDocumentAttributes()
{
DocumentType = NSDocumentType.HTML,
}, ref error);
});
我使用的是 Xamarin,因此这些是 C# 代码,但我相信它们在 Swift 和 Obj C 中是相似的。
看起来当系统在页面( View Controller )之间进行转换时,它会尝试阻止任何繁重的任务在 UI 线程上运行。这导致了这个问题。
关于ios - 为什么我的应用程序在使用 [NSAttributedString initWithData] 时在后台崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731582/
我对 Core Text 的行距一无所知。我正在使用 NSAttributedString 并在其上指定以下属性:- kCTFont属性名称- kCTParagraphStyleAttributeNa
我想显示 3 行 NSAttributedString。有没有办法根据宽度和行数确定所需的高度? 而且我不想创建 UILabel 来进行大小计算,因为我希望计算在后台线程中完成。 最佳答案 我想知道为
我想用另一个 NSAttributedString 替换 NSAttributedString 的子字符串(例如 @"replace")。 我正在寻找与 NSString 的 stringByRepl
我正在尝试在另一个文本中创建多行单独文本以实现以下文本样式。 我已经尝试使用下面的代码来实现目标,但是代码的第三部分产生了一个问题(中等字体) private func createLimit
我有一个 NSAttributedString 并希望在每个 “***” 处拆分它。所以实际上,我想在该字符串出现的任何地方分割一个 NSAttributedString 。结果应该类似于 NSAtt
尝试在 UITextView 中使用 NSAttributedString 显示上标/下标文本在 iOS13 中似乎已损坏 - 除非有人知道否则? 奇怪的是,如果我使用 UIFont systemFo
尝试在 UITextView 中使用 NSAttributedString 显示上标/下标文本在 iOS13 中似乎已损坏 - 除非有人知道否则? 奇怪的是,如果我使用 UIFont systemFo
我有一个富文本编辑器,用户可以在其中编辑字体、颜色等。模型将此信息作为 NSAttributedString 的实例保存在内存中。当我想存储此信息并写入磁盘时,我通过以下函数将属性字符串转换为 htm
这个问题在这里已经有了答案: Cannot convert value of type NSAttributedString.DocumentAttributeKey to .DocumentRea
我想将一个 html 字符串转换为 NSAttributedString,然后处理该字符串(更改颜色、字体大小、字体系列、背景-、前景色...),然后将字符串转换回来从 NSAttributedStr
为什么 NSAttributedString 不继承 NSString ? NSAttributedString 的父类为 NSObject 为什么? 最佳答案 为什么你希望它是 NSString 的
我们正在调用 NSAttributesString 的 initWithRTFD 将 NSData 转换为 attributedString。从 NSTextView 中,我们读取字符串并将其转换为
我想为标签设置样式。没有什么疯狂的,只是一些颜色,改变特定单词的字体大小,等等。我可以用 NSAttributedString 做到这一点,但是在 iOS 7 新引入的 TextKit 中这样做可能/
我正在尝试使用 RTFDFromRange 方法将 NSAttributedString 转换为 NSData。得到这个: No visible @interface for 'NSAttribute
有什么方法可以连接两个 NSAttributedString 吗?或者 NSAttributedString 和 NSString ?我尝试过这样的事情: NSAttributedString *at
有没有人知道那里有任何代码可以让我阅读包含 NSAttributedString 中的图像的 RTF? 是的,我知道有 RTFD 格式和 initWithRTF 方法...但是 initWithRTF
我正在使用 drawGlyphsForGlyphRange渲染 NSAttributedString (在 NSView drawRect 中) 有什么方法可以默认 NSAttributedStrin
这个问题在这里已经有了答案: How to use NSUnderlineStyle.PatternDot (1 个回答) 4 个月前关闭。 我有以下代码尝试为标签的字符串加下划线。 let attr
我已经花了3个小时来解决这个问题,但是有人知道为什么吗?请帮我! 下面的代码将图像添加为属性字符串的附件, UIImage *img = [UIImage imageNamed:imgName]; N
我有一个本地化的字符串: "%@ some text" = "%@ some text"; 格式说明符%@可以出现在本地化字符串中的任何位置。 问题是这个字符串应该是一个NSAttributedStr
我是一名优秀的程序员,十分优秀!