0

問題を説明するのは簡単ですが、私には解決が難しいです。初期化されないプロパティがあります。

まず、アプリの画像を表示するために iCarousel カスタム クラスを使用しています。そのデリゲート メソッドの 1 つ (あるインデックスでどのビューが表示されるかを知るために使用するメソッド) で、次のコードを使用します。

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
   if(!view)
   {
      CustomController* controller = [self.storyboard instantiateViewControllerWithIdentifier: "identifier"]; 
      //BTW, the CustomController is initialized properly. Its instance is not nil after the initialization.
      controller.imageView.image = [UIImage imageNamed: "something.png"];
      view = controller.view;
   }

   return view;       
}

ご覧のとおり、カルーセルに表示されるビューは、独自のコントローラーを備えたカスタム ビューです。ストーリーボード メソッドを使用して初期化し、imageView プロパティ (明らかに UIImageView) に画像を設定します。

「CustomController」クラスにカスタム ゲッターがあるため、imageView を初期化していないと言って興奮しないでください。このような:

//インターフェース (.h)

...

@property (nonatomic, strong) UIImageView* imageView;

...

//実装 (.m)

...

@synthesize imageView = _imageView;

...

- (UIImageView*) imageView
{
   if(!_imageView)
      _imageView = [[UIImageView alloc] init];
   return _imageView;
}

...

信じられないかもしれませんが、「_imageView = [[UIImageVIew alloc] init];」にブレークポイントを設定しても...プログラムはその行を実行しますが、_imageView は nil のままです。どうして?

「プロパティを設定する方法」を知りたくないので、回避策を教えないでください...知りたいのは、「プロパティが設定されず、常に nil のままになる理由」です。違う?。

また、imageView を IBOutlet として使用しようとしましたが、Interface Builder で imageView にリンクし、「viewDidLoad」の後にその値を確認しても、まだ nil のままです。

PS:ちなみに、私はARCを使用しています(ええ、タイトルにあることは知っています... xD)

4

1 に答える 1

0

まあ、答えは borrrden が言ったことのように見えます。問題は LLDB デバッガーでした。実際、私のプロパティは初期化されましたが、デバッガーはそれをそのように検出しませんでした.GDBに変更すると、結局のところnilではないことがわかりました. さらに、子ビューコントローラーのアウトレットにも問題があったのは、iOS5 でビューコントローラーコンテナーメソッド (DidMoveParentViewController など) を使用しなかったためです。

ちょっとトリッキー。

于 2012-04-11T16:26:04.850 に答える