0

これが私の質問です:

iOS 3.0でアプリをスムーズに実行しています。アプリを4.0に移植し、新機能を組み込むために長い間取り組んできました。

InterfaceBuilderを使用してiAdを追加しました。

3.0デバイスを引き続きサポートするには、プログラムで定義する必要があることを知っています。フレームワークを弱くリンクしました。しかし、NIBをロードするとアプリがクラッシュします。

ファームウェアのバージョンに応じてNIBをロードする方法はありますか?FirstView.xibとFirstView3X.xibがあるとしましょう

ファームウェアに応じてロードするものを選択するにはどうすればよいですか?

ありがとう

PS:StackOverflowに関する私の最初の質問です!

4

2 に答える 2

1

最初の質問おめでとうございます:-)どのようにペン先をロードしますか?インターフェイスをいくつかのファイルに分割することをお勧めします。私は通常、コントローラーごとに個別のペン先を使用し、initWithNibName:bundle:イニシャライザーを使用してそれらをロードします。ここでペン先の名前を指定するので、読み込み動作を簡単にカスタマイズできます。

タブバーコントローラーを使用してペン先をロードする場合、おそらく1つのペン先にすべてのタブがあります。タブを別々のペン先に分割し、プログラムでロードすると思います。

id tab1 = [[UIViewController alloc] initWithNibName:@"Tab1" bundle:nil];
id tab2 = [[UIViewController alloc] initWithNibName:@"Tab2" bundle:nil];
id tab3 = [[UIViewController alloc] initWithNibName:@"Tab3" bundle:nil];
[tabBarController setViewControllers:[NSArray arrayWithObjects:
    tab1, tab2, tab3, nil]];

また、ペン先の名前を制御できるようになったため、ファームウェアのバージョンを簡単に検出して、正しいペン先をロードできます。

id tab1 = [[UIViewController alloc] initWithNibName:
    [self nibNameForCurrentFirmware] bundle:nil];

ファームウェアバージョンの検出自体は、 [UIDevicesystemVersion]が使えると思います。

于 2010-10-24T10:25:36.577 に答える
1

UIDeviceオブジェクトから現在のバージョンをプルできます。

NSString *osVersion = [[UIDevice currentDevice]systemVersion];
NSArray *ver = [osVersion componentsSeparatedByString:@"."];

文字列を単一の値と比較することに満足している場合(例[[ver objectAtIndex:0] isEqualToString:@"3"])。バージョン番号を整数に変換して、範囲(たとえばosMajor >= 4)を比較できるようにすることもできます。

特定のクラスが存在するかどうかを確認し、それに基づいて適切なNIBをロードすることもできます。

if (NSClassFromString(@"MKMapView") != nil) {
    /* Do map stuff... */
}
于 2010-10-24T15:57:58.230 に答える