【发布时间】:2011-05-03 15:36:53
【问题描述】:
我知道有人已经询问过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 作为实例变量的视图控制器中,我想做passcode.immediate = NO,但我收到错误“在'PasscodeLock *' 类型的对象上找不到属性'立即'。”
如何让passcode.immediate = NO 工作?
【问题讨论】:
-
为什么你的
-lastUnlocked返回一个NSString 而-setLastUnlocked:接受一个NSDate?
标签: objective-c custom-attributes boolean accessor