27

我使用NSDataDetectorwithNSTextCheckingTypeLink在其中搜索链接的字符串(例如https://stackoverflow.com/questions)。一般来说,它工作正常,但是当字符串包含某些非常长的链接(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

有谁知道这背后的原因或对此有任何其他见解?

4

2 回答 2

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;
于 2014-02-18T08:39:58.283 回答
0

您可以预处理文本以替换那些造成问题的链接。

于 2012-11-11T14:53:07.480 回答