如何使用NSCoding对于结构的C-阵列? (MKPolyline)(How do I usi

2019-08-17 00:17发布

我想NSCoding支持添加到结构的数组c。 具体而言,这是对的子类MKPolyline ,即这是我一起工作:

@property (nonatomic, readonly) MKMapPoint *points;
@property (nonatomic, readonly) NSUInteger pointCount;

+ (MKPolyline *)polylineWithPoints:(MKMapPoint *)points count:(NSUInteger)count;

我发现如何编码一个单独的结构一个很好的答案 。 例如

NSValue* point = [NSValue value:&aPoint withObjCType:@encode(MKMapPoint)];
[aCoder encodeObject:point forKey:@"point"];

.... 

NSValue* point = [aDecoder decodeObjectForKey:@"point"];
[endCoordinateValue getValue:&aPoint];

有没有这适用于AC阵的好办法 - 或者将我只需要遍历C-阵列上?

Answer 1:

注意 :此方法仅如果数据不具有不同的“字节序”处理器之间去工作。 它应该是安全的,从去的iOS到iOS,当然,如果只有一个给定的设备上使用。

你应该能够为C-阵列存储器加载到NSData对象,然后编码NSData对象。

MKMapPoint *points = self.points;
NSData *pointData = [NSData dataWithBytes:points length:self.pointCount * sizeof(MKMapPoint)];
[aCoder encodeObject:pointData forKey:@"points"];

更新:要取回数据:

NSData *pointData = [aCode decodeObjectForKey:@"points"];
MKMapPoint *points = malloc(pointData.length);
memcpy([pointData bytes], points);
self.points = points;


文章来源: How do I using NSCoding for a c-array of structs? (MKPolyline)