8

我无法将 C-struct 添加到 NSDictionary。
C 结构是 MapKit.h 上的 MKCoordinateRegion。

该声明是

typedef struct {
    CLLocationCoordinate2D center;
    MKCoordinateSpan span;
} MKCoordinateRegion;

和 CLLocationCoordinate2D 的声明是

typedef struct {
    CLLocationDegrees latitude;
    CLLocationDegrees longitude;
} CLLocationCoordinate2D;

MKCoordinateSpan 是一样的。

现在,我想将 MKCoordinateRegion 添加到 NSDictionary。

    CLLocationCoordinate2D center = CLLocationCoordinate2DMake(40.723128, -74.000694);
    MKCoordinateSpan span = MKCoordinateSpanMake(1.0, 1.0);
    MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
    NSMutableDictionary *param = [[NSMutableDictionary alloc] init];
    [param setObject:region forKey:@"region"];

5 行有错误。
错误消息是“将 'MKCoordinateRegion' 发送到不兼容类型 'id' 的参数”

谢谢。

4

2 回答 2

11

您不能将结构直接放入字典中,但您可以使用 anNSValue将其包装成可以添加的方式。

示例

typedef struct { 
  float real; 
  float imaginary; 
} ImaginaryNumber; 

ImaginaryNumber miNumber; 
miNumber.real = 1.1; 
miNumber.imaginary = 1.41; 

NSValue *miValue = [NSValue value: &miNumber 
                        withObjCType:@encode(ImaginaryNumber)]; 

[param setObject:miValue forKey:@"region"];
于 2013-01-03T14:14:19.147 回答
3

尝试将您的结构转换为NSData

NSData *data = [NSData dataWithBytes:&region length:sizeof(MKCoordinateRegion)];
 [param setObject:data forKey:@"region"];
于 2013-01-03T14:10:17.460 回答