ViewController.m からの次のコード スニペットの場合:
- (IBAction)buttonAction:(id)sender
{
CustomButton *button = (CustomButton *)sender;
button.associatedObject = [self.sourceOfObjects.objectArray lastObject];
[self.foo.arrayOfObjects addObject:button.associatedObject]; // this does not work?
}
• CustomButton は UIButton のサブクラスであり、NSObject タイプのオブジェクトへのポインターである @property (非アトミック、強力) associatedObject を持ちます。
• sourceOfObjects は、NSObject のサブクラスである MyCustomObject 型の self の @property (非アトミック、強力) です。
• objectArray は、NSMutableArray タイプの sourceOfObjects の @property (nonatomic、strong) です。
• foo は、NSObject のサブクラスである MyCustomObject タイプの ViewController の @property (非アトミック、強力) です。
• arrayOfObjects は、NSMutableArray 型の foo の @property (非アトミック、強力) です。
質問: button.associatedObject から self.foo.arrayOfObjects へのポインターを追加できない理由がわかりました。
予想されること: その後 [self.foo.arrayOfObjects lastObject] を要求すると、button.associatedObject も指すオブジェクトが返されるはずです。
実際に何が起こるか: その後、self.foo.arrayOfObjects.count を要求すると 0 が返されます。遅延インスタンス化が行われているため、arrayOfObjects の初期化に問題があるとは思いません。
この質問を正確に言い表し、正確であることを願っています。:)