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

Posted

技术标签:

【中文标题】为啥核心数据不会触发我的价值转换器?【英文标题】:Why core data won't trigger my value transformer?为什么核心数据不会触发我的价值转换器? 【发布时间】:2015-09-12 10:30:42 【问题描述】:

我正在尝试将 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 个属性的实体:

    标题(字符串) 字幕(字符串) 位置(可转换)- 值转换器 名称:LocationToDataTransformer

当我保存我的位置时,什么也没有发生,实体(字符串)的其他属性保存,但位置为零。

保存实体代码:

-(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 添加到我的转换器中,但我没有在日志中看到它。我也尝试断点,我的转换器中没有一种方法不调用。 我什至尝试将转换器名称设置为“abracadabra”,但在日志中什么也看不到,也没有关于错误值转换器名称的信息。 我完全糊涂了。有人知道我错过了哪里吗?谢谢。

【问题讨论】:

【参考方案1】:

你的变压器走错路了。

【讨论】:

以上是关于为啥核心数据不会触发我的价值转换器?的主要内容,如果未能解决你的问题,请参考以下文章

核心数据转换器

核心数据 - 如何在不触发错误的情况下检查对象关系是不是存在

为啥我的复选框更改事件没有被触发?

为啥我的 php 标签被转换为 html 注释?

应用程序在后台时不会触发地理围栏转换

将核心数据中的 NSNumber 转换为 NSString