2011-01-21 8 views
27

Używam NSDataDetector z NSTextCheckingTypeLink do wyszukiwania ciągu dla odnośników (np. https://stackoverflow.com/questions) w jego obrębie. Ogólnie rzecz biorąc, to działa dobrze, ale gdy ciąg zawiera pewne bardzo długich linków (200 + znaków), a następnie za pomocą przestrzeni i innym słowem, mam to twierdzenie:Każdy pomysł, jak uniknąć tego stwierdzenia w DDTokenCache i co to znaczy?

> 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 

Jest to rodzaj tekstu, który powoduje, że w ten sposób:

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

Czy ktoś wie, co kryje się za tym lub ma inny wgląd w to?

+1

Należy złożyć raport o błędzie [] (http://bugreport.apple.com) z tej informacji, wraz z projektem, że próbki odtwarza problem. –

+0

OK, zrobi. Ale wciąż mam nadzieję na obejście problemu, które nie będzie wymagało złomowania NSDataDetector. – Jim

+2

Dla każdego, kto to robi: Jest on zapisany w Apple pod numerem ID problemu 8917104. Możesz go o tym wspomnieć w swoim raporcie o błędzie, jeśli go stworzysz. – Jim

Odpowiedz

0

Można przetworzyć tekst zastępujący linki, które powodują problemy.

+0

Możesz spróbować wstawić # lub? za linkiem przed dezaktywatorem _space_HEY –

+0

- proszę wyjaśnić. to brzmi jak ważne obejście :) –

1

Rozwiązany: Problem dotyczy detektorów danych UITextView.

Proszę przejść 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 
}; 

Jeśli ustawisz UIDataDetectorTypeAll lub UIDataDetectorTypeAddress lub UIDataDetectorTypeCalendarEvent następnie iOS stwarza problemy na iOS5.0 i powyżej.

textview.dataDetectorTypes=UIDataDetectorTypeAll; 

Albo

textview.dataDetectorTypes=UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent; 

Wtedy czasami stwarza problemy na iOS5.0 i powyżej.

Więc trzeba ustawić detektory danych wyraźnie:

textview.dataDetectorTypes = UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber;