我的問題只是標題。我不明白如果我使用respondsToSelector爲什麼代碼檢查實際的實現? 我在iOS 6時,Xcode 4.6UItableview沒有可見的@interface聲明選擇器setSeparatorInset
回答
我得到的回答我的問題:
所以這事做與理論比iOS或XCode的版本。編譯時編譯器(代碼)檢查是否存在方法,因爲setSeparatorInset不是iOS 6.x的一部分,所以它不起作用。b/c編譯器不檢查'if'是否只是編譯代碼。 'if'子句將在運行時進行評估。所以我試圖調用不存在的方法但是我試圖實現的是沒有錯的,它可以做到,我可以從iOS 6的代碼檢查iOS 7的方法。我有什麼做的是
[tableView performSelector:@selector()];
此進行選擇(是的tableView的一部分)在運行時執行,我不直接調用在編譯的時候,這就是爲什麼這將工作的方法。
請再讀一遍我的意見。你似乎無視我告訴你的。 1)你所做的只是錯誤的。使用6.x的Base SDK,添加試圖從iOS 7調用方法的代碼是沒有意義的。2)您正在浪費時間。直到您將Xcode更新至5.1(或更新版本)並將Base SDK更新至7.1(或更新版本),Apple纔會接受您的應用程序。 – rmaddy
還有一件事 - 在這種情況下,您使用'performSelector'將不起作用,因爲您無法正確地將參數傳遞給方法,因此您無法調用'setSeparatorInset:'方法。參數不是一個類,它是一個'struct'。 – rmaddy
你最好聽馬迪,因爲你的應用程序不會被應用程序商店接受。 – gnasher729
- 1. 'NavigationViewController'沒有可見的@interface聲明選擇器'initWithRootViewController:'
- 2. 'NSURLRequest'沒有可見的@interface聲明選擇器'initwithURL:'
- 3. NSURL沒有可見的@interface聲明選擇器componentsseparatedbystring
- 4. 'FirstViewController'沒有可見的@interface聲明選擇器'setUIImage'
- 5. AFNetworking 2.0.0-RC2:'DNHackerNewsAPIClient'沒有可見的@interface聲明選擇器'getPath:parameters:success:failure:'?
- 6. 錯誤:'XYZPerson'沒有可見的@interface聲明選擇器'saySomething'
- 7. xcode錯誤:masterViewController沒有可見的@interface聲明選擇器
- 8. 'NSString'沒有可見的@interface聲明選擇器'重複'
- 9. 'UIApplication'沒有可見的@interface聲明選擇器'openUrl:'
- 10. Objective-C錯誤:沒有可見的@interface聲明選擇器
- 11. 'UIColor'沒有可見的@interface聲明選擇器'blendedColorWithFraction:ofColor:'
- 12. 'RBQFetchedResultsController'沒有可見的@interface聲明選擇器'updateFetchRequest:sectionNameKeyPath:andPeformFetch:'
- 13. 如何忽略「X沒有可見的@interface聲明選擇器」?
- 14. 'BNRItemStore'沒有可見的@interface聲明選擇器'deleteImageForKey;'
- 15. 沒有可見的@interface用於聲明選擇器calculatetip
- 16. 'ViewController'沒有可見的@interface聲明選擇器'presentModalViewController:animated:completion:'
- 17. 'UIWebView'沒有可見的@interface聲明選擇器'initWithNibName:bundle:'
- 18. 「沒有可見的@interface聲明選擇器」錯誤
- 19. 沒有可見的@interface爲RKDynamicMapping聲明選擇器setObjectMapping:whenValueOfKeyPath:isEqualTo - Restkit 0.2
- 20. 'forum'沒有可見的@interface聲明選擇器'backToLastPage'
- 21. 'NSData'沒有可見的@interface聲明選擇器
- 22. 「DiceView」沒有可見的@interface聲明選擇器「showDiceNumber」。
- 23. 'CLLocationManager'沒有可見的@interface聲明選擇器'requestAlwaysAuthorization'
- 24. 'UIViewController'沒有可見的@interface聲明選擇器
- 25. 'NSObject <PageControlDelegate>'沒有可見的@interface聲明選擇器'pageControlPageDidChange:'
- 26. 'GPUImageOutput <GPUImageInput>'沒有可見的@interface聲明選擇器'imageFromCurrentlyProcessedOutputWithOrientation:'
- 27. 沒有可見的@interface for ____聲明選擇器
- 28. objective c error「沒有可見的@interface for'NSString'聲明選擇器'timeIntervalSinceDate:'」
- 29. 'CLLocation'沒有可見的@interface聲明選擇器'setDesiredAccuracy:'
- 30. 'AppDelegate'沒有可見的@interface聲明選擇器
爲什麼使用Xcode 4.6和iOS 6的基礎SDK?蘋果不會接受這樣的應用程序。僅供參考 - 您調用的方法是在iOS 7中添加的,這就是您遇到錯誤的原因。 – rmaddy
我的部署目標是iOS 6,Base SDK是iOS 6.1。我知道這個方法是在iOS 7中,這就是爲什麼我在使用respondsToSelector之前檢查它的存在。我認爲如果對象(tableView)沒有響應選擇器(setSeparatorInset),那麼它應該忽略它,但它給出的錯誤。你能幫忙解釋一下爲什麼嗎? – Husyn
您的Base SDK是6.1。您不能從較新版本的iOS(例如iOS 7)調用方法。再次,爲什麼你的Base SDK設置爲6.1? Apple不會接受你的應用程序。他們要求您使用Xcode 5.1或更高版本並完全支持iOS 7. – rmaddy