0

常に同じペン先をロードするビューコントローラーを作成しようとしています。私の初期化コードは次のようになります。

-(id)init
{
    NSString* nibName;

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        nibName = @"XIB_iPad";
    else
        nibName = @"XIB_iPhone";

    self = [super initWithNibName:nibName bundle:nil];
    if (self)
    {
        ...
    }
    return self;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    return [self init];
}

問題は、このコードの結果、ViewControllerのビューがnilになることです。ここで私が間違っていることはありますか?これを行うためのより良い方法はありますか?

ありがとう。

4

4 に答える 4

7

以下を確認してください。

  1. XIB_iPad.xibとXIB_iPhone.xibの両方がプロジェクトに存在します。
  2. 各xibファイルの「ファイル所有者」は正しいクラス(YourViewController)です。
  3. (xibファイル内の)各ファイル所有者ビューアウトレットは、ビューに正しくリンクされています。

これらの3つの手順を確認しても問題が解決しない場合は、カスタムViewControllerのインスタンス化とセットアップに使用するコードを提供してください。

于 2012-05-27T02:45:21.910 に答える
5

私も同じ問題を抱えていました。

選択した回答が示すようにすべてのオプションをチェックしましたが、問題は解決しませんでした。

私の問題は、ビューの自動レイアウトが有効になっていることでした(ただし、この機能のため、ビューは常にnilになりました。誰かが知っている場合は、コメントしてください)。

自動レイアウトを無効にするには、[ファイルインスペクター]に移動し、[自動レイアウトを使用する]オプションのチェックを外します(図を参照)。

誰かを助けてください。

ここに画像の説明を入力してください

于 2013-02-25T17:29:08.940 に答える
3

注意点の1つは、ドキュメントによると、に合格nilした場合は、次の順序で検索を実行することです(強調を追加)。nibName

MyViewControllerのように、ビューコントローラのクラス名が「Controller」という単語で終わる場合、 MyView.nibのように、「Controller」という単語のないクラス名と名前が一致するnibファイルを検索します。

ビューコントローラクラスの名前と一致する名前のnibファイルを探します。たとえば、クラス名がMyViewControllerの場合、MyViewController.nibファイルを検索します。

私は、最後に「Controller」という接尾辞が付いていない、基本的に同じ名前のプレーンなバニラビューを持っていました。意図したペン先の代わりにこれをロードしていました。

于 2014-05-14T16:20:58.823 に答える
1

あなたのコードは私には正しく見えます。XIBファイルの名前が異なっていて(デバイスの大文字と小文字が区別されます)、それらが正しいターゲットのメンバーである可能性はありますか?

于 2012-05-27T00:37:30.507 に答える