我的应用程序的新版本取决于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.
}
(这是在应用代表&#39; s - (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
中。它们都没有正常工作。第一个(在app委托中)加载屏幕但不加载代码中的任何内容(如NSLog()和UIAlertView)。第二个(viewDidLoad)没有显示屏幕,它只是加载我的新版本而没有我在代码中做的任何自定义。
那么,如何将不在iOS 5.0+上的设备发送到oldVersion
?
答案 0 :(得分:0)
在viewDidLoad中,检查版本并将其记录到nsuserdefaults,这样您就不必每次都检查它。然后加载新视图。
答案 1 :(得分:0)
您可以检查对象是否实现了仅在较新版本的操作系统上可用的方法。这是检查当前运行时环境的常用方法。例如:
if ( [[UIApplication sharedApplication] respondsToSelector(userInterfaceLayoutDirection)] ) {
// userInterfaceLayoutDirection is only available in iOS 5+
// use 5.0+ version of xib
}
我相信你也可以检查一个常量的地址是不是nil,并从中得出OS版本:
if ( &UIApplicationLaunchOptionsNewsstandDownloadsKey != nil ) {
// UIApplicationLaunchOptionsNewsstandDownloadsKey is only available in iOS 5+
// use 5.0+ version of xib
}
答案 2 :(得分:0)
我解决了!显然,在显示新的XIB之前,我所要做的就是稍微等一下(我使用的是0.1)。所以现在是:
[self performSelector:@selector(usersOnOldVersionsOfiOSReallyNeedToUpgradeToiOS5OrHigherToUseThisVeryCoolApp) withObject:nil afterDelay:0.1];
其中usersOnOldVersionsOfiOSReallyNeedToUpgradeToiOS5OrHigherToUseThisVeryCoolApp
打开XIB for gt; iOS 5。