27 votes

Une idée de comment éviter cette assertion dans DDTokenCache et ce qu'elle signifie ?

J'utilise NSDataDetector con NSTextCheckingTypeLink pour rechercher des liens dans une chaîne de caractères (par ex. http://stackoverflow.com/questions ) en son sein. En général, cela fonctionne bien, mais lorsque la chaîne contient certains liens très longs (200+ chars) suivis d'un espace et d'un autre mot, j'obtiens cette assertion :

> 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

C'est le genre de texte qui provoque cela :

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

Quelqu'un sait-il ce qui se cache derrière tout cela ou a-t-il d'autres idées à ce sujet ?

1voto

Gaurav Borole Points 109

Résolu : Le problème concerne les détecteurs de données UITextView.

Veuillez parcourir 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 vous définissez UIDataDetectorTypeAll ou UIDataDetectorTypeAddress ou UIDataDetectorTypeCalendarEvent, iOS crée des problèmes sur iOS5.0 et supérieur.

textview.dataDetectorTypes=UIDataDetectorTypeAll; 

Ou

textview.dataDetectorTypes=UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent; 

Ensuite, il crée parfois des problèmes sur iOS5.0 et plus.

Vous devez donc définir explicitement les détecteurs de données :

textview.dataDetectorTypes = UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber;

0voto

Daij-Djan Points 18696

Vous pourriez prétraiter le texte en remplaçant les liens qui posent problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X