2013-01-09 27 views
6

Với mã này:Tôi nhận được một "chuyển đổi ngầm từ kiểu enumeration" cảnh báo trong Xcode dành cho iOS và tôi không biết tại sao

NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink 
                   error:&error]; 

Tôi nhận được cảnh báo này:

Implicit conversion from enumeration type 'enum NSTextCheckingType' to different enumeration type 'NSTextCheckingTypes' (aka 'enum NSTextCheckingTypes') 

Ai đó có thể giải thích cho tôi tại sao tôi nhận được cảnh báo này và cách khắc phục nó?

Trả lời

9

+dataDetectorWithTypes: không tuyên bố để có một giá trị từ enum NSTextCheckingTypes hơn NSTextCheckingType, nhưng đi bằng phần còn lại của tài liệu của nó thực sự cho phép bạn chỉ định các giá trị riêng lẻ từ enum thứ hai. Tôi chỉ cần thêm một diễn viên vào NSTextCheckingTypes. Bạn cũng có thể muốn file a bug trên API.

+1

Tôi nghĩ rằng đây là một bụi phóng xạ từ việc sử dụng enums với loại cố định cơ bản. 'NSTextCheckingTypes' được sử dụng để chỉ là một typedef cho' uint64_t', nhưng bây giờ nó thực sự là một typedef cho 'enum NSTextCheckingTypes: uint64_t'. –

+0

Dường như một lỗi trong khai báo cho '+ dataDetectorWithTypes:'. Nó được khai báo để có 'NSTextCheckingTypes' (với một 's'), nhưng có vẻ như nó thực ra phải lấy' NSTextCheckingType'. Nộp một lỗi và sau đó sử dụng '# pragma's để tắt cảnh báo trên dòng này, và sau đó tạo ghi chú để kiểm tra lại mã này mỗi lần phát hành cho đến khi bạn có thể loại bỏ' # pragma'. – bames53

+0

Tôi không chắc chắn sử dụng dàn diễn viên là đúng cách để tạm thời tắt tiếng cảnh báo này, mặc dù nó có lợi ích khi API được sửa, nó sẽ bắt đầu cảnh báo lại. – bames53

5

Xem tài liệu cho phương pháp này. Tham số đầu tiên cần có loại NSTextCheckingTypes. Nhưng giá trị bạn chuyển vào, NSTextCheckingTypeLink, thuộc loại NSTextCheckingType.

Bạn cần phải vượt qua hoặc NSTextCheckingAllSystemTypes, NSTextCheckingAllCustomTypes hoặc NSTextCheckingAllTypes.

Edit:

Sau khi xem xét thêm, trong khi những gì tôi nói có vẻ chính xác từ một điểm tham số của xem, phần còn lại của các tài liệu cho một cái gì đó phương pháp tuyên bố khác mà mâu thuẫn với kiểu tham số. Hoặc là một cái gì đó thay đổi hoặc đây là một lỗi. Ai đó nên báo cáo điều này với Apple.

Tiếp tục chỉnh sửa:

Một workaround sẽ được tận dụng một dàn diễn viên:

NSDataDetector *detector = 
    [NSDataDetector dataDetectorWithTypes:(NSTextCheckingTypes)NSTextCheckingTypeLink 
    error:&error]; 
+0

Không hoàn toàn chính xác — tài liệu dành cho NSDataDetector chỉ định rằng, ví dụ: 'NSTextCheckingTypeLink' hợp lệ. –

+0

Tôi vừa mới nhận ra điều đó. Có gì đó không đúng ở đây. Các tài liệu thực sự gây hiểu nhầm về điều này. – rmaddy

+0

Đối với câu hỏi này: Tôi nhận được một “chuyển đổi ngầm từ kiểu enumeration” cảnh báo trong Xcode dành cho iOS và tôi không biết tại sao Đây là câu trả lời đúng: NSDataDetector * dò = [NSDataDetector dataDetectorWithTypes: (NSTextCheckingTypes) NSTextCheckingTypeLink lỗi: & lỗi]; Tôi đã có cùng một vấn đề, bằng cách sử dụng dòng mã trên làm việc hoàn hảo cho tôi. Vấn đề là chúng tôi đã phải đối mặt vì loại Casting chỉ .. :) Cảm ơn bạn đã trả lời @rmaddy +1 cho bạn – NSExpression

Các vấn đề liên quan