2

構造体の c 配列に NSCoding サポートを追加したいと考えています。具体的には、これは のサブクラス用ですMKPolyline。つまり、これは私が作業しなければならないものです:

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

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

個々のstructをエンコードする方法について、良い答えを見つけました。例えば

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

.... 

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

これを ac Array に適用する良い方法はありますか? それとも単に c-array を反復処理する必要がありますか?

4

1 に答える 1

4

:このアプローチは、データが異なる「エンディアンネス」を持つプロセッサー間を行き来しない場合にのみ機能します。特定のデバイスでのみ使用する場合は、iOSからiOSに安全に移行できるはずです。

NSDataC配列のメモリをオブジェクトにロードしてから、オブジェクトをエンコードできるはずです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;
于 2013-02-16T18:50:21.137 に答える