ModelTransformer 1.2.2

ModelTransformer 1.2.2

测试已测试
Lang语言 Obj-CObjective C
许可证 BSD
发布上次发布2014年12月

Gennf 维护。



Model Transformer

要求

ModelTransformer 的目标是把一个模型,如 API 提供的模型,转换为应用程序使用的 CoreData 模型。为此,转换器需要了解要转换到的实体。因此,这个转换器只能与 NSManagedObjectModel 结合使用。

安装

用法

MTObjectTransformerMTArrayTransformer 是自定义模型转换的基础类。因此,使用这些转换器.application 需要 subclassing 这两个类以提供它们的逻辑。

下面的例子使用日期格式化将所有类型为 NSDateAttributeType 的属性转换为 NSDate 对象,并将名称为 'url' 的属性转换为 NSURL 对象。

@implementation MyObjectTransformer

- (id)transformedValueForAttribute:(NSAttributeDescription *)attributeDescription
                          ofObject:(id)object 
                          userInfo:(NSDictionary *)userInfo
{
    if (attributeDescription.attributeType == NSDateAttributeType) {
        NSString *dateString = [object valueForKey:attributeDescription.name];
        if (dateString) {
            return [[[self class] dateFormatter] dateFromString:dateString];
        }
        return nil;
    } else if ([attributeDescription.name isEqualToString:@"url"]) {
        NSString *urlString = [object valueForKey:@"url"];
        if (urlString) {
            return [NSURL URLWithString:urlString];
        }
        return nil;
    } else {
        return [super transformedValueForAttribute:attributeDescription
                                           ofObject:object
                                          userInfo:userInfo];
    }
}

@end

通常转换是通过以下方法执行的,这些方法可以在子类中覆盖。如果属性是属性属性,则基类将返回 valueForKey: 的值;如果属性是关系属性,则返回 MTObjectTransformerMTArrayTransformer 的对象,具体取决于基数(一对多或多对多)。

对象转换器

@interface MTObjectTransformer : NSObject


- (id)transformedValueForAttribute:(NSAttributeDescription *)attributeDescription
                          ofObject:(id)object
                          userInfo:(NSDictionary *)userInfo;

- (id)transformedValueForRelationship:(NSRelationshipDescription *)relationshipDescription  
                             ofObject:(id)object
                             userInfo:(NSDictionary *)userInfo
                                class:(Class)_class;

- (id)transformedValueForRelationship:(NSRelationshipDescription *)relationshipDescription  
                             ofObject:(id)object
                             userInfo:(NSDictionary *)userInfo;

@end

数组转换器

@interface MTArrayTransformer : NSArray

- (id)transformedObjectAtIndex:(NSUInteger)index
                       ofArray:(NSArray *)array
                      userInfo:(NSDictionary *)userInfo;

- (NSUInteger)transformedCountOfArray:(NSArray *)array
                             userInfo:(NSDictionary *)userInfo;

@end

作者

Tobias Kräntzer, [email protected]

许可证

版权所有 (c) 2014, Tobias Kräntzer。保留所有权利。

在满足以下条件的情况下,允许重新分发和使用源代码和二进制形式,是否有修改:

  1. 源代码的分发必须保留上述版权声明、本许可协议列表和以下免责声明。

  2. 二进制形式的重分发必须复制上述版权声明、本许可协议列表和以下免责声明在文档和/或其他与分发提供的材料中。

  3. 未经事先书面许可,不得使用版权持有者的名称或其贡献者的名称作为该软件派生产品的推广或标志。

本软件由版权所有者和贡献者提供“现状”且不做任何明示或暗示的保证,包括但不限于适销性和特定用途适用性的暗示保证。在任何情况下,版权所有者或贡献者均不对因使用本软件而产生的任何直接、间接、附带、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,即使已被告知此类损害的可能性。