アプリに奇妙な問題があります。「LoginViewController」という名前の NIB を使用して、実行時に VC をロードします。UIView
その NIB には、次のように NIB に配置されているオブジェクトへのアウトレットがたくさんあります。
実行時に、これらの UIView オブジェクトをヘッダーとしてテーブル ビューに動的に配置します。UIView
この場合の各セパレート(UITableView
右側にあるものを除く) は、このように IBOutlet として設定されます。もちろん、それぞれに異なる名前があります。
@property (strong, nonatomic) IBOutlet UIView *connectionInProgressView;
ここで、VC のviewDidLoad
方法で、これら 4 つの個別のビューすべてを実行し、ログに書き込むことでそれらが存在することを確認します。
NSLog(@"connection in progress view: %@", self.connectionInProgressView);
私の問題はこれです: self.connectionInProgressView
iPadではnilであり、iPhoneではnilではありません。プラットフォームに関係なく、他のすべてのビューは nil ではなく、インスタンス化されます。iOS 5.0、5.1、および 6.1 のシミュレーターでこれを実行しています。すべての iPad シミュレーターで問題を再現できます。私のアプリは問題なく動作し、iPhone ではスピナーを使用してビューをロードしますが、iPad ではビューが nil であるためロードできません! どうして!?
私は次のことを試しました:
- NIB のファイルの所有者が適切なビューを指していることを確認する
self.connectionInProgressView
が他の IBOutlet を指していないこと- 他のすべてのサブビューが問題のあるビューと同じ方法で接続されていることを確認します。彼らです。
- すべての NIB 接続を削除した後、削除
self.connectionInProgressView
して再作成します。 UILabel
ビューからアクティビティ インジケーターを削除し、内部を含むビューのみを読み込みます。運が悪い、それは活動指標ではありません。- を参照している可能性のある VC 内のコードを確認しました
self.connectionInProgressView
。何もありません( の nil ステートメント以外viewDidUnLoad
)。 UINavigationController
との AppDelegate プロパティのプロパティ属性タイプを確認していますLoginViewController
。- のコピーを
LoginViewController
AppDelegate に保持しますが、これは無駄に思え、結果に違いはありませんでした。
[編集2]
質問: VC はどのようにロードされますか
AppDelegateUINavigationController
のプロパティである があります。これは、VC をルート ビュー コントローラーとして渡すUINavigationController
alloc-init'dです。applicationDidFinishLaunchingWithOptions
この時点で VC をインスタンス化します。
// Create login/start up views
LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
self.loginViewNavigationController = [[UINavigationController alloc] initWithRootViewController:loginViewController];
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
self.loginViewNavigationController.modalPresentationStyle = UIModalPresentationFormSheet;
これはUINavigationController
後で iPad のモーダル フォーム シートとして提示しますが (それが私の問題に寄与しているかどうかはわかりません)、iPhone で動作していることに注意してください。
しばらくして AppDelegate で別のデリゲート クラスがイベントをスローしたときに、この UINavigationController を表示し、私の VC をモーダルにします。私はこのようにします:
if (self.loginViewNavigationController != nil) {
[self.window.rootViewController presentViewController:self.loginViewNavigationController animated:YES completion:nil];
}
この 1 つの特定のビューが NIB にドラッグされ、他のすべてのビューが iPad では nil であり、iPhone では nil ではないのと同じように配線されている理由を突き止めようとしています。
[編集1]重複した質問を検索しているときに、これを見つけることができませんでした:
私は一人じゃない!
何か案は?