Я знаю, что кто-то уже спрашивал о написании геттера и сеттера для переменной BOOL. Но если я определяю пользовательские методы получения и установки 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
, но получаю сообщение об ошибке «Свойство 'immediate' не найдено в объекте типа 'PasscodeLock *'».
Как заставить passcode.immediate = NO
работать?
-lastUnlocked
возвращает NSString, а-setLastUnlocked:
принимает NSDate? - person kennytm   schedule 03.05.2011