2011-09-18 1 views
0

私はiPad版のUIPopoverControllerを使用する普遍的なアプリケーションで作業します。 (基本SDKとデプロイメントターゲットの両方がiOS 4.3です)iPhoneシミュレータで実行中のUIPopoverControllerクラスの可用性の検出に関する問題

iPadとiPhone用の条件付きコードパスをテストするためにiPhoneシミュレータ(バージョン4.3)を使用すると、弱いリンクもNSClassFromString(@"UIPopoverController")のアプローチも期待された動作をしません。

UIKitフレームワークの弱いリンクをテストするときは、LLVM 2.1コンパイラを確認し、UIKitフレームワークを 'Target-> Build Phases-> Link Binary with Libraries'で 'オプション'にしてください。 (私が理解するように、Xcode 4.1でそれを行う方法です)。 iPhoneシミュレータ上のコード

if ([UIPopoverController class]) { 
... 
_popover = [[UIPopoverController alloc] initWithContentViewController:controller]; 
... 
} 

を実行

[UIPopoverController class]nilを返さないことを示すアプリケーションがクラッシュします。 [UIPopoverController class]を上記のNSClassFromString(@"UIPopoverController")に置き換えると、同じクラッシュになります。

シミュレータで実行しているときに、これらの条件チェックを実行する方法を知っている人はいますか?

答えて

-2

コードがiPadで実行されているかどうかを確認してください。
もしそうなら、安全にUIPopoverControllerを使用できます。

- (BOOL)isPad 
{ 
    if ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)]) 
    { 
     return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad); 
    } 
    else 
    { 
     return NO; // all iPad OS's implement -userInterfaceIdiom 
    } 
} 
+0

お返事ありがとうございます、私はあなたの提案が動作すると確信しています。しかし、あなたが使用しようとしている機能だけをテストする必要があるクラスの弱いリンクとテストの全体的なポイントではなく、機能が存在する(将来の)デバイスが存在する(想定されない)と仮定しない。このため、私は本当にデバイスではなく機能性をテストしたいと思っています。 – Jonas

0

UIPopoverControllerクラスので、それはiOSのバージョン4.xを持つ任意のデバイスであってもiPhoneにnilを返すべきではないのiOSスタートバージョン3.2の一部として存在している、唯一のiOS 3.1.3でiPhoneとあなたの下には、(弱いとnilを取得オプション)リンク。このクラスを使用するには、上記のuserInterfaceIdiomで解決策をお試しください。

+0

この点を明確にしていただきありがとうございます。最後に、UIUserInterfaceIdiomPadのテスト方法を使用しました。これは期待通りに機能します。私は何とかAppleのドキュメントから、クラスの存在をテストすることがベストプラクティスであるという印象を受けました(そして、特に、UIPopoverControllerクラスはiPhone上に全く存在しませんでした)。 – Jonas

関連する問題