objective c - ¿Alguna idea de cómo evitar esta afirmación en DDTokenCache y qué significa?
objective-c parsing (2)
Puede preprocesar el texto reemplazando los enlaces que crean problemas.
Estoy usando NSDataDetector
con NSTextCheckingTypeLink
para buscar una cadena de enlaces (por ejemplo, https://stackoverflow.com/questions ) dentro de ella. En general, funciona bien, pero cuando la cadena contiene ciertos enlaces muy largos (más de 200 caracteres) seguidos de un espacio y otra palabra, obtengo esta afirmación:
> 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
Este es el tipo de texto que causa esto:
> blog.somethingorother.com/2011/storynameetcmorestuff/utm_source/eedburnerutmmediumfeedutmcampaign/FeedanutmcontentGooglFeedfetcherutmcampaign/FeedanutmcontentGooglFeedfetcher/eedburnerutm_mediumfeedutmcampaign/FeedanutmcontentGooglFeedfetcherutmcampaign HEY
¿Alguien sabe qué hay detrás de esto o tiene alguna otra idea sobre esto?
Resuelto: el problema es con los detectores de datos UITextView.
Por favor, vaya a 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
};
Si configura UIDataDetectorTypeAll o UIDataDetectorTypeAddress o UIDataDetectorTypeCalendarEvent, iOS crea problemas en iOS5.0 y superiores.
textview.dataDetectorTypes=UIDataDetectorTypeAll;
O
textview.dataDetectorTypes=UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent;
Entonces a veces crea un problema en iOS5.0 y superior.
Entonces necesita configurar detectores de datos explícitamente:
textview.dataDetectorTypes = UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber;