2013-01-03 37 views
6

Tôi gặp sự cố khi thêm C-struct vào NSDictionary.
C-struct là MKCoordinateRegion trên MapKit.h.obj-c thêm c-struct vào từ điển

khai Đó là

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

và khai CLLocationCoordinate2D là

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

MKCoordinateSpan là cùng.

Bây giờ, tôi muốn thêm MKCoordinateRegion vào 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 dòng có lỗi.
thông báo lỗi là "Gửi" MKCoordinateRegion 'đến thông số của loại không tương thích' id '"

Cảm ơn.

+2

Xem câu trả lời không được chấp nhận [ở đây] (http://stackoverflow.com/questions/6538726/how-to-return-multiple-values-from-a-method/6539044 # 6539044). Ví dụ này dành cho các mảng nhưng vẫn áp dụng cho các từ điển. – Joe

Trả lời

9

Bạn không thể đặt một struct trực tiếp vào một cuốn từ điển, nhưng bạn có thể sử dụng một NSValue để bọc nó trong một cách như vậy mà nó có thể được thêm vào.

Example:

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"]; 
+0

Cảm ơn bạn đã trả lời! –

+1

+1 cho giải pháp linh hoạt/chung chung nhưng thanh lịch. Tuy nhiên câu trả lời được liên kết của Joe từ bình luận của anh ta tạo thành một giải pháp có liên quan và cụ thể. – Till

3

Thử chuyển đổi cấu trúc của bạn để NSData

NSData *data = [NSData dataWithBytes:&region length:sizeof(MKCoordinateRegion)]; 
[param setObject:data forKey:@"region"]; 
+0

Rất cảm ơn bạn! –

+0

Bạn được chào đón! –

Các vấn đề liên quan