2011-01-21 30 views
27

Tôi đang sử dụng NSDataDetector với NSTextCheckingTypeLink để tìm kiếm chuỗi liên kết (ví dụ: https://stackoverflow.com/questions) bên trong. Nói chung, nó hoạt động tốt, nhưng khi chuỗi chứa liên kết nhất định rất dài (200 ký tự) tiếp theo là một không gian và một từ khác, tôi nhận được sự khẳng định này:Bất kỳ ý tưởng làm thế nào để tránh khẳng định này trong DDTokenCache và những gì nó có nghĩa là?

> 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 

Đây là loại văn bản mà nguyên nhân này:

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

Có ai biết điều gì đằng sau điều này hoặc có bất kỳ thông tin chi tiết nào khác về vấn đề này không?

+1

Bạn nên nộp đơn [report bug] (http://bugreport.apple.com) với thông tin này, cùng với một dự án mẫu mà tái tạo vấn đề. –

+0

OK, sẽ thực hiện. Nhưng tôi vẫn hy vọng cho một workaround mà sẽ không liên quan đến việc loại bỏ NSDataDetector. – Jim

+2

Đối với bất kỳ ai khác đang chạy ứng dụng này: Nó được gửi cùng với Apple theo ID sự cố 8917104. Bạn có thể tham khảo điều đó trong báo cáo lỗi của mình, nếu bạn tạo báo cáo lỗi. – Jim

Trả lời

0

Bạn có thể tiền xử lý văn bản thay thế các liên kết gây rắc rối.

+0

Bạn có thể thử chèn # hoặc? phía sau liên kết trước _space_HEY –

+0

trình gỡ xuống - vui lòng giải thích. điều này nghe có vẻ giống như một giải pháp hợp lệ :) –

1

Đã giải quyết: Sự cố xảy ra với thiết bị dò dữ liệu UITextView.

Hãy đi qua 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 
}; 

Nếu bạn đặt UIDataDetectorTypeAll hoặc UIDataDetectorTypeAddress hoặc UIDataDetectorTypeCalendarEvent sau đó iOS tạo ra vấn đề trên iOS5.0 trở lên.

textview.dataDetectorTypes=UIDataDetectorTypeAll; 

Hoặc

textview.dataDetectorTypes=UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent; 

Sau đó, đôi khi nó tạo ra vấn đề trên iOS5.0 trở lên.

Vì vậy, bạn cần phải thiết lập dò dữ liệu một cách rõ ràng:

textview.dataDetectorTypes = UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber;