AMC 是自动魔法编码 - Mac & iOS 项目的非常容易使用的 NSCoding 替代方案。AMC 使您能够创建任何受支持对象的 NSDictionary 表示形式,将其保存为 PLIST(或任何其他 PLIST 兼容的文件格式,例如 JSON),并在不编写大量代码的情况下再次加载数据。
AMC 使用 Objective-C 运行时来自动确定对象的属性,并使用键值编码来获取和设置它们。
AMC 将对象保存到 NSDictionary,该对象可以保存为 PLIST(或 JSON)。
键只是 ivars 名称和/或属性名称。
一个特殊键( "class" )用于存储对象的类名。
在 Mac 上运行单元测试,并查看您的文档文件夹 - 那里会有很多 PLIST。
它们是保存到 PLIST 文件中的测试对象。
另外:重写-AMCFieldTypeForValueWithKey:以使用AMC作为字段的所有非标量实例变量。
注意:由于更困难的内存管理、需要编写更多代码、不支持自定义结构体以及可能未来的限制,建议避免在AMC中使用没有属性的实例变量。
-AMCKeysForDictionaryRepresentation返回一个包含NSString的NSArray,这些字符串将传递给KVC方法以获取并设置AMCEnabled对象的字段。默认实现返回所有对象属性的全集(包括只读和读写属性),包括由超类声明的属性(NSObject的属性不包括在内)。重写此方法以手动选择由AMC进行编码/解码的属性。有关更多信息和使用示例,请参阅“测试”文件夹中的测试。
要支持您的自定义结构体,您必须执行以下操作
- (NSString *) AMCEncodeStructWithValue: (NSValue *) structValue withName: (NSString *) structName
{
if ([structName isEqualToString: @"CustomStruct" ])
{
CustomStruct custom;
[structValue getValue: &custom];
return NSStringFromCustomStruct(custom);
}
return [super AMCEncodeStructWithValue: structValue withName: structName];
}
- (NSValue *) AMCDecodeStructFromString: (NSString *)value withName: (NSString *) structName
{
if ([structName isEqualToString: @"CustomStruct" ])
{
CustomStruct custom = CustomStructFromNSString(value);
return [NSValue valueWithBytes: &custom objCType:@encode(CustomStruct)];
}
return [super AMCDecodeStructFromString: value withName: structName];
}
请参阅FooWithStructs及AMCTestSimple以查看有效的例子。
所有异常、坏数据和不希望的测试都位于AMCExceptions.m中。
以下是使用AMC可能发生的一些坏事情:
可以定义 AMC_NO_THROW 以禁用以下方法抛出异常
如果定义了 AMC_NO_THROW,它们将简单地返回 nil 和/或什么都不做。
-AMCDecodeStructFromString:withName: 和 -AMCEncodeStructWithValue:withName: 即使定义了 AMC_NO_THROW 也可以抛出异常。不要在你的这些方法的实现中捕获任何异常——你不需要直接调用它们,因此 AMC 会为你捕获它们的异常。
AMC 在 MIT 许可证的条款和条件下授权。
http://www.opensource.org/licenses/mit-license.php
版权所有 2011 Stepan Generalov。
特此授予任何人免费获取此软件及其相关文档副本(“软件”)的副本的许可权
使用该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售该软件的副本的,并允许向获得该软件的人提供上述软件副本,前提是
以下条件:
上述版权声明和本许可声明应包含在软件的任何副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和不侵犯。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论这些索赔是由于合同、侵权还是其他行为产生的,以及与软件或软件的使用或其他交易有关。
软件的使用。
特此授予,任何人从以上来源免费获得此软件及其相关文档副本的副本的许可权
为使用该软件。
以上版权声明和本许可声明应包含在软件的任何副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和不侵犯。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论这些索赔是由于合同、侵权还是其他行为产生的,以及与软件或软件的使用或其他交易有关。
软件的使用。
特此授予,任何人从以上来源免费获得此软件及其相关文档副本的副本的许可权
为使用该软件。
以上版权声明和本许可声明应包含在软件的任何副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和不侵犯。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论这些索赔是由于合同、侵权还是其他行为产生的,以及与软件或软件的使用或其他交易有关。