2

當創建一個新的Xcode 4觀點基於項目,它創建於applicationDelegate didFinishLaunching方法行:落後的UIWindow RootViewController的兼容性

self.window.rootViewController = self.viewController; 

但屬性rootViewController只與iOS 4.0出現。

我可以在這裏寫什麼來與4.0之前的iOS兼容?

P.S. :由於某些問題,我將無法測試解決方案,因此請將其保留。

回答

6

使用自省檢測UIWindow類是否在運行時具有該屬性,如果不是,只需將視圖控制器的視圖作爲子視圖添加到窗口。

if ([UIWindow instancesRespondToSelector:@selector(rootViewController)]) { 
    self.window.rootViewController = self.viewController; 
} else { 
    [self.window addSubview:self.viewController.view]; 
} 
+0

謝謝你,你絕對確定你的解決方案? – Oliver

+0

100%確定。如果您仍然擁有它的一個副本,並且在引入rootViewController屬性之前發現根視圖控制器的視圖被添加爲窗口的子視圖,您可以嘗試在Xcode 3中創建項目。 '+ instancesRespondToSelector:'是用於向後兼容的基本內省方法之一。 –

+0

使用#if __IPHONE_MAX_VERSION_ALLOWED> = 40000和instancesRespondToSelector有什麼區別? – Oliver

1

fichek答案是完全正確的。該答案+1。

但是,請記住,iOS 2應用程序are no more accepted in the store。這同樣會在iOS 5發佈時發生在iOS 3上時可能發生。據傳iOS 5在大約一個月內就出局了。

+0

刪除armv6支持並保持iOS 3.X支持將毫無意義,所以我希望他們也能刪除iOS 3.X支持。除了> 3.2,它非常接近iOS 4 api-wise,甚至支持這個屬性。 –

+0

+1用於刪除iOS 3.x支持。編寫這些向後兼容代碼非常難看。 – nonamelive