我知道有人已经问过 Writing getter and setter for BOOL variable .但是,如果我分别定义自定义 getter 和 setter 方法 setImmediate
和 isImmediate
,我希望 passcode.immediate = NO
也工作。
我没有任何实例变量,但也许我应该?我可以为 NSDate *lastUnlocked
添加一个。
到目前为止,这是相关代码:
// PasscodeLock.h
extern NSString *const kPasscodeLastUnlocked;
@interface PasscodeLock : NSObject {
}
- (BOOL)isImmediate;
- (void)setImmediate:(BOOL)on;
- (NSDate *)lastUnlocked;
- (void)resetLastUnlocked;
- (void)setLastUnlocked:(NSDate *)lastUnlocked;
@end
// PasscodeLock.m
#import "PasscodeLock.h"
NSString *const kPasscodeLastUnlocked = @"kPasscodeLastUnlocked";
@implementation PasscodeLock
#pragma mark PasscodeLock
- (BOOL)isImmediate {
return self.lastUnlocked == nil;
}
- (void)setImmediate:(BOOL)on {
if (on) {
[self resetLastUnlocked];
} else {
self.lastUnlocked = nil;
}
}
- (NSDate *)lastUnlocked {
return [[NSUserDefaults standardUserDefaults] objectForKey:kPasscodeLastUnlocked];
}
- (void)resetLastUnlocked {
NSDate *now = [[NSDate alloc] init];
self.lastUnlocked = now;
[now release];
}
- (void)setLastUnlocked:(NSDate *)lastUnlocked {
[[NSUserDefaults standardUserDefaults] setObject:lastUnlocked forKey:kPasscodeLastUnlocked];
}
然后,在将 PasswordLock *passwordLock
作为实例变量的 View Controller 中,我想执行 passcode.immediate = NO
,但我收到错误“Property在“PasscodeLock *”类型的对象上找不到“立即”。”
如何让 passcode.immediate = NO
工作?
最佳答案
你需要类似的东西
@property (nonatomic, getter=isImmediate) BOOL immediate;
在您的 .h 文件中,当然还有 @synthesize
语句在您的 .m 文件中。这将创建属性并定义您的 getter 方法名称。
关于Objective-C:自定义 BOOL 访问器(getter 和 setter)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5871984/