为什么核心数据不会触发我的价值转换器?

时间:2015-09-12 10:30:43

标签: ios objective-c core-data

我尝试将CCLocation存储在CoreData中。 我开始写自定义值变换器,但我已经卡住了。

我的变压器:

#import "LocationToDataTransformer.h"
#import <CoreLocation/CoreLocation.h>
@implementation LocationToDataTransformer
+ (BOOL)allowsReverseTransformation {
    return YES;
}

+ (Class)transformedValueClass {
     NSLog(@"tranform");
    return [NSData class];

}

- (id)transformedValue:(id)value {
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:value];
    NSLog(@"tranform");
    return data;
}

- (id)reverseTransformedValue:(id)value {
     CLLocation *location = (CLLocation*)[NSKeyedUnarchiver unarchiveObjectWithData:value];
     NSLog(@"tranform");
    return location;
}

@end

变压器注册

+ (void)initialize {

        LocationToDataTransformer *transformer = [[LocationToDataTransformer alloc] init];
         [NSValueTransformer setValueTransformer:transformer forName:@"LocationToDataTransformer"];

}

我检查了[NSValueTransformer valueTransformerNames]数组,我看到了我的变压器名称。

在模型中,我有一个具有3个属性的实体:

  1. title(string)
  2. 副标题(字符串)
  3. 位置(可转换) - 值变换器 名:LocationToDataTransformer
  4. 当我保存我的位置时,没有任何反应,实体(字符串)的其他属性保存,但位置为零。

    保存实体代码:

    -(void)saveBookmark:(BookmarkEntity*)bookmark {
        NSManagedObject *object = [[NSManagedObject alloc]initWithEntity:_descr insertIntoManagedObjectContext:_context];
        BookmarkEntity* entity = (BookmarkEntity*)object;
        entity.title = bookmark.title;
        entity.subtitle = bookmark.subtitle;
        entity.location = bookmark.location;
        if (_context.hasChanges) {
            NSError* error;
            bool saved = [_context save:&error];
            if (!saved) {
                NSLog(@"Error while saving: %@",error.localizedDescription);
            }
        }
    }
    

    正如您所看到的,我已将NSLog添加到我的变压器中,但我没有在日志中看到它。此外,我尝试断点,我的变压器没有一种方法不会打电话。 我甚至尝试将变压器名称设置为&#34; abracadabra&#34;并且在日志中看不到任何内容,没有关于错误值变换器名称 我完全糊涂了。任何人都知道我错过了什么?感谢。

1 个答案:

答案 0 :(得分:0)

你的变压器是错误的。