2013-01-09 164 views
6

有了這個代碼:我得到一個「從枚舉類型隱式轉換」警告在Xcode iOS和我不知道爲什麼

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

我得到這樣的警告:

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

有人可以向我解釋爲什麼我得到這個警告以及如何解決它?

回答

9

+dataDetectorWithTypes:並要求採取從NSTextCheckingTypes枚舉,而不是NSTextCheckingType的值,而是通過將剩餘它的文檔確實應該允許你從後面的enum中指定單個值。我只是將一個強制轉換添加到NSTextCheckingTypes。您可能還希望在API上使用file a bug

+1

我認爲這是使用具有固定基礎類型的枚舉的後果。 'NSTextCheckingTypes'過去只是'uint64_t'的一個typedef,但現在它實際上是'enum NSTextCheckingTypes:uint64_t'的一個typedef。 –

+0

它看起來像'+ dataDetectorWithTypes:'聲明中的一個錯誤。它被宣佈採用'NSTextCheckingTypes'(帶有's'),但它看起來應該實際上採用'NSTextCheckingType'。提交一個bug,然後使用'#pragma'來禁用這行的警告,然後記下每次發佈後重新檢查這段代碼,直到你可以刪除'#pragma'。 – bames53

+0

我不確定使用演員表是暫時消除此警告的正確方法,但它確實具有這樣的好處,即在API修復後會再次發出警告。 – bames53

5

看看這個方法的文檔。第一個參數需要是NSTextCheckingTypes。但是您傳入的值​​的類型爲NSTextCheckingType

您需要通過NSTextCheckingAllSystemTypes,NSTextCheckingAllCustomTypesNSTextCheckingAllTypes

編輯:

經進一步審查,而我說,似乎從一個參數上看是正確的,該文檔的方法權利要求別的東西違背了參數類型的其餘部分。要麼改變或者這是一個錯誤。有人應該向蘋果報告。

進一步編輯:

一個解決方法是使用一個演員:

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

不太準確 - NSDataDetector的文檔指定,例如'NSTextCheckingTypeLink'本身是有效的。 –

+0

我只是注意到這一點。有些事情不對。這些文檔在這方面真的很具誤導性。 – rmaddy

+0

對於這個問題: 我正在一個「從枚舉類型隱式轉換」警告在Xcode iOS和我不知道爲什麼 這是正確的答案: NSDataDetector *探測器= [NSDataDetector dataDetectorWithTypes:(NSTextCheckingTypes) NSTextCheckingTypeLink error:&error]; 我有同樣的問題,通過使用上面的代碼行完全適合我。問題是我們正面臨因爲只有類型鑄造.. :) 感謝您的答案@rmaddy +1對你 – NSExpression

相關問題