gpt4 book ai didi

ios - 用 Mantle 编码 c-struct (NSCoding)

转载 作者:可可西里 更新时间:2023-11-01 05:12:52 24 4
gpt4 key购买 nike

我想使用 Mantle 框架 ( https://github.com/github/Mantle ) 为我的具有结构属性的类支持 NSCoding:

typedef struct {
int x;
int y;
} MPoint;

typedef struct {
MPoint min;
MPoint max;
} MRect;


@interface MObject : MTLModel

@property (assign, nonatomic) MRect rect;

@end

@implementation MObject
@end

但是当我尝试 [NSKeyedArchiver archiveRootObject:obj toFile:@"file"]; 它在 MTLModel+NSCoding.m 中崩溃时,在 - (void)encodeWithCoder:(NSCoder * )coder 在线

case MTLModelEncodingBehaviorUnconditional:
[coder encodeObject:value forKey:key];

Mantle 是否支持 c-struct 编码(以及解码),或者我需要为此类类自定义实现 NSCoding 协议(protocol)?

最佳答案

我的原始数据结构是 XML(是的,我知道):

  ...
<Lat>32.062883</Lat>
<Lot>34.782904</Lot>
...

我使用了基于 KissXMLMTLXMLAdapter,但您可以看到它如何适用于任何其他序列化器。

+ (NSValueTransformer *)coordinateXMLTransformer {
return [MTLValueTransformer reversibleTransformerWithBlock:^id(NSArray *nodes) {
CLLocationCoordinate2D coordinate;
for (DDXMLNode *node in nodes) {
if ([[node name] isEqualToString:@"Lat"]) {
coordinate.latitude = [[node stringValue] doubleValue];
} else if ([[node name] isEqualToString:@"Lot"]) {
coordinate.longitude = [[node stringValue] doubleValue];
}

}
return [NSValue value:&coordinate
withObjCType:@encode(CLLocationCoordinate2D)];
}];
}

如果需要,您可以添加一个reverseBlock

关于ios - 用 Mantle 编码 c-struct (NSCoding),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20471905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com