2014-06-14 114 views
-1

我的問題只是標題。我不明白如果我使用respondsToSelector爲什麼代碼檢查實際的實現? 我在iOS 6時,Xcode 4.6UItableview沒有可見的@interface聲明選擇器setSeparatorInset

warning and error

+2

爲什麼使用Xcode 4.6和iOS 6的基礎SDK?蘋果不會接受這樣的應用程序。僅供參考 - 您調用的方法是在iOS 7中添加的,這就是您遇到錯誤的原因。 – rmaddy

+0

我的部署目標是iOS 6,Base SDK是iOS 6.1。我知道這個方法是在iOS 7中,這就是爲什麼我在使用respondsToSelector之前檢查它的存在。我認爲如果對象(tableView)沒有響應選擇器(setSeparatorInset),那麼它應該忽略它,但它給出的錯誤。你能幫忙解釋一下爲什麼嗎? – Husyn

+2

您的Base SDK是6.1。您不能從較新版本的iOS(例如iOS 7)調用方法。再次,爲什麼你的Base SDK設置爲6.1? Apple不會接受你的應用程序。他們要求您使用Xcode 5.1或更高版本並完全支持iOS 7. – rmaddy

回答

0

我得到的回答我的問題:

所以這事做與理論比iOS或XCode的版本。編譯時編譯器(代碼)檢查是否存在方法,因爲setSeparatorInset不是iOS 6.x的一部分,所以它不起作用。b/c編譯器不檢查'if'是否只是編譯代碼。 'if'子句將在運行時進行評估。所以我試圖調用不存在的方法但是我試圖實現的是沒有錯的,它可以做到,我可以從iOS 6的代碼檢查iOS 7的方法。我有什麼做的是

[tableView performSelector:@selector()]; 

此進行選擇(是的tableView的一部分)在運行時執行,我不直接調用在編譯的時候,這就是爲什麼這將工作的方法。

+0

請再讀一遍我的意見。你似乎無視我告訴你的。 1)你所做的只是錯誤的。使用6.x的Base SDK,添加試圖從iOS 7調用方法的代碼是沒有意義的。2)您正在浪費時間。直到您將Xcode更新至5.1(或更新版本)並將Base SDK更新至7.1(或更新版本),Apple纔會接受您的應用程序。 – rmaddy

+0

還有一件事 - 在這種情況下,您使用'performSelector'將不起作用,因爲您無法正確地將參數傳遞給方法,因此您無法調用'setSeparatorInset:'方法。參數不是一個類,它是一個'struct'。 – rmaddy

+0

你最好聽馬迪,因爲你的應用程序不會被應用程序商店接受。 – gnasher729

相關問題