我有这段代码:
·H
int cellsPerRow;
@property int cellsPerRow;
的.m
@synthesize cellsPerRow;
-(void)init {
...
cellsPerRow = 4;
}
-(void)setCellsPerRow:(int)cellsPerRowLocal {
cellsPerRow = cellsPerRowLocal;
....
}
但是没有调用setter方法。有什么想法吗?
答案 0 :(得分:3)
您正在分配变量而不是属性。而不是:
cellsPerRow = 4;
您需要执行以下任一操作:
self.cellsPerRow = 4;
或
[self setCellsPerRow:4];
前者由编译器转换为后者,因此它们是等价的。
答案 1 :(得分:1)
属性和合成为您创建setter和getter方法。实质上,您所做的实际上是覆盖了首先为您创建的方法。
不要那样做。只需使用点符号,如self.cellsPerRow = cellsPerRowLocal
。这会将cellsPerRow
ivar设置为cellsPerRowLocal
中您想要的任何内容。
在你的头文件中:
int cellsPerRow;
@property (nonatomic, retain) int cellsPerRow;
在您的实施文件中:
@synthesize cellsPerRow;
- (void) inThisMethodYouSetcellsPerRow {
cellsPerRowLocal = ... ;
self.cellsPerRow = cellsPerRowLocal;
}