2012-05-07 78 views
0

我的應用程序的新版本取決於iOS 5.0+。但是,我的舊版本允許iOS 4.如果我沒有記錯,Apple會拒絕該應用程序,如果它刪除了某些用戶的支持。我試圖讓不在iOS 5.0+上的設備加載另一個名爲oldVersion的XIB。以下是我已經試過:如何爲舊設備加載不同的視圖控制器?

float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 
if (version < 5.0) { 
    UIViewController *olderVersion = [[[ViewController alloc] initWithNibName:@"oldVersion" bundle:nil] autorelease]; 
    self.window.rootViewController = olderVersion; 
    [self.window makeKeyAndVisible]; 
} else { 
    //Load normally. 
} 

(這是在應用程序委託的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


我也試過在我viewDidLoad加載我的新版本,並

float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 
if (version < 5.0) { 
    oldVersion *screen = [[oldVersion alloc] initWithNibName:nil bundle:nil]; 
    [self presentModalViewController:screen animated:NO]; 
    [screen release]; 
    return; 
} else { 
    //Normal stuff... 
} 

。它們都不能正常工作。第一個(在應用程序委託中)加載屏幕,但不加載代碼中的任何內容(如NSLog()和UIAlertView's)。第二個(viewDidLoad)不顯示屏幕,它只是加載我的新版本,沒有我在代碼中做的任何定製。

那麼,我該如何發送不是iOS 5.0+的設備到oldVersion

回答

0

我解決它!顯然,在顯示新的XIB之前,我所要做的只是等一下(我正在使用0.1)。所以,現在是:

[self performSelector:@selector(usersOnOldVersionsOfiOSReallyNeedToUpgradeToiOS5OrHigherToUseThisVeryCoolApp) withObject:nil afterDelay:0.1]; 

其中usersOnOldVersionsOfiOSReallyNeedToUpgradeToiOS5OrHigherToUseThisVeryCoolApp打開了XIB爲>的iOS 5

0

在viewDidLoad中,檢查版本並將其記錄到nsuserdefaults,因此您不必每次都檢查它。然後加載新視圖。

+0

這不會改變任何東西。另外,爲什麼我應該保存它?如果用戶升級他/她的設備會怎麼樣。 –

0

您可能會檢查一個對象是否實現了僅在較新版本的OS上可用的方法。這是檢查當前運行時環境的常用方法。例如:

if ([[UIApplication sharedApplication] respondsToSelector(userInterfaceLayoutDirection)]) { 
    // userInterfaceLayoutDirection is only available in iOS 5+ 
    // use 5.0+ version of xib 
} 

我相信你也可以檢查一個常數的地址不是零,並從中導出的操作系統版本:

if (&UIApplicationLaunchOptionsNewsstandDownloadsKey != nil) { 
    // UIApplicationLaunchOptionsNewsstandDownloadsKey is only available in iOS 5+ 
    // use 5.0+ version of xib 
} 
+0

我已經可以檢測到用戶是否正在運行> iOS 5.無論如何,感謝您的時間。我已經解決了它。 –

相關問題