【发布时间】:2026-01-14 05:55:02
【问题描述】:
我正在尝试将 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”,但在日志中什么也看不到,也没有关于错误值转换器名称的信息。 我完全糊涂了。有人知道我错过了哪里吗?谢谢。
【问题讨论】:
标签: ios objective-c core-data