Подтвердить что ты не робот

Любая идея, как избежать этого утверждения в DDTokenCache и что это значит?

Я использую NSDataDetector с NSTextCheckingTypeLink для поиска строки для ссылок (например, qaru.site/info/...) внутри нее. Как правило, он работает нормально, но когда строка содержит определенные очень длинные ссылки (200+ символов), за которыми следует пробел и другое слово, я получаю это утверждение:

> DDRequire failed: the following assertion will only be logged once
> 
> assertion on
> /SourceCache/MobileDataDetectorsCore/MobileDataDetectorsCore-154/Sources/PushDown/DDTokenCache.c:310
> "delta >= 0" failed :Bad shift in
> DDTokenCacheMoveStreamOffset, aborting

Это текст, который вызывает это:

> blog.somethingorother.com/2011/storynameetcmorestuff/utm_source/eedburnerutmmediumfeedutmcampaign/FeedanutmcontentGooglFeedfetcherutmcampaign/FeedanutmcontentGooglFeedfetcher/eedburnerutm_mediumfeedutmcampaign/FeedanutmcontentGooglFeedfetcherutmcampaign HEY

Кто-нибудь знает, что позади этого или есть другое понимание этого?

4b9b3361

Ответ 1

Решено: проблема связана с детекторами данных UITextView.

Пройдите через UIDataDetectorTypes:

typedef NS_OPTIONS(NSUInteger, UIDataDetectorTypes) {
UIDataDetectorTypePhoneNumber   = 1 << 0,          // Phone number detection
UIDataDetectorTypeLink          = 1 << 1,          // URL detection    
#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
UIDataDetectorTypeAddress       = 1 << 2,          // Street address detection
UIDataDetectorTypeCalendarEvent = 1 << 3,          // Event detection
#endif    

UIDataDetectorTypeNone          = 0,               // No detection at all
UIDataDetectorTypeAll           = NSUIntegerMax    // All types
};

Если вы установите UIDataDetectorTypeAll или UIDataDetectorTypeAddress или UIDataDetectorTypeCalendarEvent, то iOS создает проблемы на iOS5.0 и выше.

textview.dataDetectorTypes=UIDataDetectorTypeAll; 

или

textview.dataDetectorTypes=UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent; 

Затем иногда возникает проблема с iOS5.0 и выше.

Таким образом, вам необходимо явно установить детекторы данных:

textview.dataDetectorTypes = UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber;

Ответ 2

Вы можете предварительно обработать текст, заменяя те ссылки, которые создают проблемы.