問題を説明するのは簡単ですが、私には解決が難しいです。初期化されないプロパティがあります。
まず、アプリの画像を表示するために 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)