0

アプリの新しいバージョンは iOS 5.0 以降に依存しています。ただし、私の古いバージョンでは iOS 4 が許可されていました。私の記憶が正しければ、一部のユーザーのサポートが削除された場合、Apple はアプリを拒否するでしょう。iOS 5.0+ 以外のデバイスに、 という別の XIB をロードさせようとしています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 など)。2 つ目 (viewDidLoad) は画面に表示されず、コードで行ったカスタマイズを一切行わずに新しいバージョンをロードするだけです。

では、iOS 5.0 以降ではないデバイスを に送信するにはどうすればよいoldVersionですか?

4

3 に答える 3

0

オブジェクトが、新しいバージョンのOSでのみ使用可能なメソッドを実装しているかどうかを確認できます。これは、現在のランタイム環境をチェックする一般的な方法です。例えば:

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

viewDidLoad で、バージョンを確認して nsuserdefaults に記録するので、毎回確認する必要はありません。次に、新しいビューをロードします。

于 2012-05-07T23:45:31.007 に答える