2012-02-03 9 views
1

私のチームは最近、かなり大きなプロジェクトをARCに変換しました。変換は順調に進み、アプリケーションは実行され、5.0で正常に動作します。ViewController iOS 4.3で実行されているARCプロジェクトのnibからサブビューをロードしていませんか?

問題は4.3です。無地のinitとコードでインスタンス化コントローラは、VCのビューのサブビューをロードしていない任意のビュー(これは5.0の作業を行います)

はここに要約です:

[[MyViewController alloc] init]とビューコントローラをインスタンス化します。 (のUIViewControllerのinitを呼び出しinitWithNibName:nilをバンドル:ゼロ)

これは、ビューコントローラ(MyViewController.xib)と同じ名前を持つペン先をロード

*予想:ペン先はトップレベルのすべてのサブビューを正常にインスタンス化されますビューとすべてのアウトレットセット

*実際:nibはインスタンス化され、MyViewControllerオブジェクトのviewプロパティが設定されています。しかし、ビューのサブビューの配列が空で、これらのビューへの出口は皆無であり、

*回避策提示したときにビューが空に表示されます:私はされていない

[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil] 

を使用してVC /ロード・ペン先をインスタンス化しますクリーンなプロジェクトでこれを複製することができます。これは、ARCから始めるかARCに変換するかのどちらかです。私のチームと私はこれに取り組んでいますが、その間に他の誰かがこの問題にぶつかって根本的な原因や引き金を見つけたのか疑問に思っていました。あなたはそれが正しいのロードだことを保証することができる方法

- (id)init 
{ 
    return [self initWithNibName:NSStringFromClass([self class]) bundle:nil]; 
} 

答えて

1

誰かがこの問題を抱えている場合のフォローアップ。

私たちは4.xをサポートしており、ARCを使用しているので、Mike AshのMAZeroingWeakRefを使用して4.xで弱いポインタを取得することにしました。最終的には、問題をMAZeroingWeakRefに戻すために十分に分離しました。私たちは、MAZWRプロジェクトとgithubのに問題を投稿してマイクが起こっていたことを説明:

https://github.com/mikeash/MAZeroingWeakRef/issues/13

(基本的にMAZWRはTestViewController_MAZeroingWeakRefSubclassのようなものへのVCクラスの内部名を変更するVCのinitは、このクラス名に依存します。関連付けられたペン先をロードするには、ペン先を見つけることができません。initWithNibName:bundle:を呼び出すことによって、関連付けられたペン先が明示的にロードされたクラス名を明示的に指定します)。

0

なく、あなたの問題を引き起こしているのかわからしかし、すべてのあなたのビューコントローラの共通の基底クラスを作成する場合は、としてinitメソッドを定義することができますあなたのコードをどこにでも明示的なnib名で入力して泥沼にする必要はありません。

私は時々、このメソッドをUITableViewControllersで使用する必要がありました。その方法は、initメソッドが規約に従っていないようです。

+0

また、同じ問題を抱えています。説明については、以下の回答を参照してください。 – Robb

関連する問題