AppSettings 1.0.1

AppSettings 1.0.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2018年1月

Kamil Burczyk维护。



AppSettings是一个简单的工具,允许自动将对象序列化和反序列化到NSDictionary,并通过NSUserDefaults进行读写。最初是为了简单地管理NSUserDefaults中的应用设置而创建的。

摘要

当您想要将自定义对象持久化到例如NSUserDefaults时,您必须使用NSCodingNSKeyedArchiver来序列化它。这并不困难,但很耗时,Xcode也没有通过生成一些默认编码和解码方法存根来使这个过程更容易。当您必须手动序列化所有属性时,这变得非常痛苦。

另一方面,使用模型对象来配置您的应用设置,而不是只在NSUserDefaults的键下写值,是非常方便的。您可以使用代码补全,编译器在您输入拼写错误时警告您,而且您不需要记住自定义字典中的所有键字符串。

那么为什么不编写一个序列化器,将具有属性的自定义对象转换为NSDictionary并将其存储在类名键下呢?AppSettings正是这样做的!:)

如何使用它?

您需要做的事情只是创建自己的类,从AppSettings继承。您想保存的字段必须在您的.h文件中以属性(@property)的形式声明,就像在其他对象中一样。当您完成并进行对象准备就绪后,您调用save以持久化您的对象。当您想要加载之前保存的对象时,您调用- (id)load,它返回AppSettings子类的实例。就这样!:)

示例用法

  • 声明您的自定义设置类,从AppSettings继承
#import "AppSettings.h"
#import "MyNestedSettings.h"

@interface MySettings : AppSettings

@property (nonatomic, strong) NSDate *exampleDate;
@property (nonatomic, strong) NSString *exampleString;
@property (nonatomic, strong) NSNumber *exampleNumber;
@property (nonatomic, assign) int exampleInt;
@property (nonatomic, assign) BOOL exampleBool;

@end
  • 创建您类的实例并设置一些值
MySettings *mySettings = [[MySettings alloc] init];
mySettings.exampleDate = [NSDate date];
  • 完成设置后保存它
[mySettings save];
  • 在您下次启动应用程序时加载它
MySettings *mySettings = [MySettings load];

您的设置在MySettings键下保存,并且看起来像这样

    MySettings =     {
        exampleBool = 1;
        exampleDate = "2013-12-08 11:26:56 +0000";
        exampleInt = 456;
        exampleNumber = 123;
        exampleString = "Example string \U0105\U0119\U015b\U0107";
    };

附加方法

您可以在AppSettings类中实现的接口中尝试其他方法

- (id)initWithDictionary:(NSDictionary*)dictionaryOfPropertiesAndValues;

- (NSArray*)propertiesNames;
- (NSDictionary*)dictionaryOfPropertiesAndValues;

- (BOOL)save;
- (BOOL)saveUnderKey:(NSString*)mainKey;

+ (id)load;
+ (id)loadFromKey:(NSString*)mainKey;

例如,您可以提取属性和值的字典并自行处理,或者在不同键下保存设置。

您还可以查看AppSettingsTests.m文件,查看每个方法是如何操作的。

嵌套对象

是的,您可以拥有嵌套对象。只需将它们也声明为 AppSettings 的子类,并在您的设置主类中使用作为属性。请参阅测试部分中的 MySettings.hMyNestedSettings.h 文件。

#import "AppSettings.h"
#import "MyNestedSettings.h"

@interface MySettings : AppSettings

@property (nonatomic, strong) NSDate *exampleDate;
@property (nonatomic, strong) NSString *exampleString;
@property (nonatomic, strong) NSNumber *exampleNumber;
@property (nonatomic, assign) int exampleInt;
@property (nonatomic, assign) BOOL exampleBool;

@property (nonatomic, strong) MyNestedSettings *myNestedSettings;

@end
#import "AppSettings.h"

@interface MyNestedSettings : AppSettings

@property (nonatomic, strong) NSString *nestedSettingsString;

@end

您保存的具有嵌套对象的设置现在看起来类似这样

    MySettings =     {
        exampleBool = 1;
        exampleDate = "2013-12-08 11:26:56 +0000";
        exampleInt = 456;
        exampleNumber = 123;
        exampleString = "Example string \U0105\U0119\U015b\U0107";
        myNestedSettings =         {
            nestedSettingsString = "nested example string";
        };
    };

回答一些问题

  • 是的,它使用 <objc/runtime.h> 来提取属性信息,并使用 KVC 来设置和获取它们的值。
  • 如果您不想阅读许可证:是的,您可以用它来做任何您想做的事情,无论是个人还是商业用途,且无需付费,但您不能用它来毁灭世界! ;)

许可证

AppSettings 在 MIT 许可下可用。更多信息请参阅 LICENSE 文件。