对于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的子类,并且具有@property(非原子,强)关联对象,它是指向NSObject类型对象的指针。
•sourceOfObjects是MyCustomObject类型的自我的@property(非原子的,强大的),是NSObject的子类。
•objectArray是NSMutableArray类型的sourceOfObjects的@property(非原子的,强大的)。
•foo是MyCustomObject类型的ViewController的@property(非原子的,强大的),是NSObject的子类。
•arrayOfObjects是NSMutableArray类型的foo的@property(非原子,强)。
问题:我知道为什么我不能将button.associatedObject中的指针添加到self.foo.arrayOfObjects,以便我在self.foo.arrayOfObjects中有一个指向与button.associatedObject相同的对象的指针?
我期待发生什么:如果我随后要求[self.foo.arrayOfObjects lastObject],它应该返回button.associatedObject也指向的对象。
实际发生的事情:随后要求self.foo.arrayOfObjects.count返回0.我不相信这是初始化arrayOfObjects的问题,因为我已经实现了懒惰的实例化。
我希望我准确地说出这个问题,试着准确。 :)
答案 0 :(得分:1)
我忘了在类MyCustomObject的定义中为self.foo.arrayOfObjects添加延迟实例化。 :S这意味着在文件MyCustomObject.m中缺少以下行:
- (void)setArrayOfObjects:(NSMutableArray *)arrayOfObjects
{
_arrayOfObjects = arrayOfObjects;
}
- (NSMutableArray *)arrayOfObjects
{
if (!_arrayOfObjects) _arrayOfObjects = [[NSMutableArray alloc] init];
return _arrayOfObjects;
}
因为在MyCustomObject类中没有延迟实例化arrayOfObjects,所以从ViewController.m中向self.foo.arrayOfObjects添加一个对象没有做任何事情因为self.foo.arrayOfObjects仍然为null,并且将一个对象添加到null获取一个null对象
答案 1 :(得分:0)
我可能在这里错了,但NSObject及其所有子类实际上都是指针。因此,如果您显式创建指向NSObject的指针,然后将该指针传递给addObject
,则将指针传递给指针,而不是指向该方法所期望的Object的指针。
您如何定义associatedObject
?