简单,愚蠢!
直接将代码直接硬编码以访问 NSUserDefaults
的密钥非常无聊,并且因为 NSUserDefaultsDidChangeNotification
不包含 userInfo
而痛苦。
创建一个通过属性访问密钥的 NSUserDefaults
类别是一种更好的方法。如果知道哪些密钥已经更改,那就更好了。
这就是 KissNSUserDefaults
项目诞生的目的。您需要做的是在头文件中声明属性,并在实现中全部编写 @dynamic
。在 +load
中运行 +kiss_setup
将为您生成所有访问器。
将 NSUserDefaults+KissNSUserDefaults.h
和 NSUserDefaults+KissNSUserDefaults.m
添加到您的项目中。创建自己的 NSUserDefaults
类别,导入 NSUserDefaults+KissNSUserDefaults.h
并在您的类别的 +load
中运行 +kiss_setup
。
请查看示例项目中的 NSUserDefaults+KissDemo.(h|m)
以获取详细信息。您可以为 KissNSUserDefaultsDidChangeNotification
添加观察者以监听更改。
NSUserDefaults+KissDemo.h
#import "NSUserDefaults+KissNSUserDefaults.h"
@interface NSUserDefaults (KissDemo)
// KissNSUserDefaults currently supports NSObject, NSInteger, float and BOOL types
@property (nonatomic, strong) NSString *string;
@property (nonatomic) NSInteger integer;
@property (nonatomic) CGFloat floatValue;
@property (nonatomic) BOOL boolValue;
@end
NSUserDefaults+KissDemo.m
#import "NSUserDefaults+KissDemo.h"
@implementation NSUserDefaults (KissDemo)
// KissNSUserDefaults will generate all accessors for you
@dynamic string, integer, floatValue, boolValue;
+ (void)load
{
[self kiss_setup];
}
@end
在 MIT 许可证下。有关更多信息,请参阅 LICENSE 文件。