Получение EXC_BAD_ACCESS / KERN_INVALID_ADDRESS при создании представления - PullRequest
0 голосов
/ 26 ноября 2018

Я создаю собственное представление, которое будет отвечать за отображение текста.

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

1 Ответ

0 голосов
/ 01 февраля 2019

Я понял проблему с помощью @ bbum.Проблема заключалась в создании экземпляра UIView в неосновном потоке.Это приводит к состоянию гонки, которое в конечном итоге приводит к сбою приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...