我正在创建一个自定义视图,该视图将负责显示一些文本。
BOOL DisplayBiggerString(Item *feedItem, CGFloat contentWidth) {
StyledString *const tryBiggerString = [feedItem buildBiggerString:[feedItem myStyle]];
CoreTextView *testTextView = [[CoreTextView alloc] initWithFrame:CGRectMake(0, 0, contentWidth, 0)];
[testTextView setStyledString:tryBiggerString];
return testTextView.numberOfLines > 1;
}
似乎在崩溃:
CoreTextView *testTextView = [[CoreTextView alloc] initWithFrame:CGRectMake(0, 0, contentWidth, 0)];
我不确定为什么会导致该视图崩溃。里面的函数只是创建一个新视图,如下所示:
if (self = [super initWithFrame:CGRectMake(0, 0, width, 1)])
我个人无法对此进行复制,因为我只能对收到的崩溃报告做出回应。我检查了contentWidth,它只是获得collectionView的宽度:
CGRectGetWidth(self.collectionView.bounds)
,这是在dispatch_async调用之外完成的,该调用在从缓存中获取字符串时会调整字符串的大小:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
MakeTextCacheWarmup(newObjects, self.dataSource.feedSectionControllerComponents.itemConfiguration, width, width);
是否有某种方法可以通过某些宽度而导致崩溃?我已经测试了所有浮点值,到目前为止,它们似乎还不错。还是在异步块内部创建视图是一个问题?我从不添加视图,而只是用它来确定文本的行数
libobjc.A.dylib objc_msgSend
1CoreFoundation -[__NSSetM addObject:]
2UIKitCore UIViewDidSetNeedsDisplay
3UIKitCore -[UIView _createLayerWithFrame:]
4UIKitCore UIViewCommonInitWithFrame
5UIKitCore -[UIView initWithFrame:]
6MyApp __cmp_gen_92064(MYUserSession+MYMediaUploadManager.m:13)
7+MyApp DisplayBiggerString(MYConsumptionHelpers.m:12)
8+MyApp +[MYFeedItemTextCell buildStyledStringWithFeedItem:feedItemRow:pageCellState:configuration:contentWidth:textWidth:combinedContextOptions:userSession:](MYFeedItemTextCell.m:403)
9+MyApp __cmp_gen_8c7c(MYMainAppViewController.m:174)
10+MyApp MakeTextCacheWarmup(MakeTextCacheWarmup.m:47)
11+MyApp __81-[MYMainFeedViewController feedNetworkSource:didFinishLoadingObjects:withConfig:]_block_invoke.818
答案 0 :(得分:0)
我在@bbum的帮助下找到了问题。问题在于在非主线程上创建UIView
的实例。这导致竞态条件最终导致应用程序崩溃。