0

我的应用程序的新版本依赖于 iOS 5.0+。但是,我的旧版本允许 iOS 4。如果我没记错的话,如果它删除了对某些用户的支持,Apple 将拒绝该应用程序。我试图让不在 iOS 5.0+ 上的设备加载另一个名为oldVersion. 这是我尝试过的:

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


我也试过加载我的新版本和

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...
}

在我的viewDidLoad. 它们都不能正常工作。第一个(在应用程序委托中)加载屏幕但不加载代码中的任何内容(如 NSLog() 和 UIAlertView 的)。第二个(viewDidLoad)不显示屏幕,它只是加载我的新版本,没有我在代码中进行的任何自定义。

那么,我如何将不在 iOS 5.0+ 上的设备发送到oldVersion

4

3 回答 3

0

在viewDidLoad中,检查版本并记录到nsuserdefaults,这样就不用每次都检查了。然后加载新视图。

于 2012-05-07T23:45:31.007 回答
0

您可能会检查对象是否实现了仅在较新版本的操作系统上可用的方法。这是检查当前运行时环境的常用方法。例如:

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
}
于 2012-05-08T00:04:51.860 回答
0

我解决了!显然,我所要做的就是在显示新的 XIB 之前稍等一下(我使用的是 0.1)。所以现在是:

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

在哪里usersOnOldVersionsOfiOSReallyNeedToUpgradeToiOS5OrHigherToUseThisVeryCoolApp为 > iOS 5 打开 XIB。

于 2012-05-08T00:15:30.070 回答