【发布时间】:2015-11-26 02:32:04
【问题描述】:
我有一个 UIImageView 的子类,其中包含一些布尔属性,如下所示:并且我无法在我的代码中将 isOccupied 值设置为 YES。
#import <UIKit/UIKit.h>
@interface TargetView : UIImageView
@property (strong, nonatomic) NSString* letter;
@property (assign, nonatomic) BOOL isMatched;
@property (assign) BOOL isOccupied;
-(instancetype) initWithLetter:(NSString*) letter andSideLength:(float)sideLength;
@end
这些 TargetView 中的每一个都存储在NSMutableArray* _targets;
当我执行以下操作时
for (TargetView* tv in _targets) {
if (!tv.isOccupied) {
tv.isOccupied = YES;
//[tv setIsOccupied:YES]; <--- have also tried used this setter
break;
}
}
下次我运行代码时,targetView 的评估结果仍为 False。所以我无法将 isOccupied 值设置为 TRUE、true 或 YES。
我如下初始化targetView,所有targetViews初始设置为isOccupied为false
-(instancetype)initWithLetter:(NSString *)letter andSideLength:(float)sideLength{
UIImage* img = [UIImage imageNamed:@"blank.png"];
self = [super initWithImage:img];
if (self != nil) {
self.isMatched = NO;
self.isOccupied = NO;
float scale = sideLength/img.size.width;
self.frame = CGRectMake(0, 0, img.size.width*scale, img.size.width*scale);
_letter = @"";
}
return self;
}
将布尔值分配给 targetView 的代码是在控制器中运行的委托方法,而不是在 targetView 类本身中。这会导致问题吗?或者是我如何设置我的属性?我试过assign,atomic,nonatomic,......
编辑**
我更改了一些代码以在类初始化中使用**_isOccupied** 而不是**self.isOccupied**。现在它可以工作了。谁能解释为什么这有效?
【问题讨论】:
标签: objective-c properties boolean setter getter-setter