2011-07-18 25 views
30

Tôi cảm thấy xấu vì đã hỏi điều này bởi vì nó dường như là một điều đơn giản để treo lên, nhưng tôi đã xem xét mọi tài nguyên có liên quan mà tôi có thể, đã thử kết hợp cho các giải pháp mà tôi đã thấy người khác sử dụng và không có gì hoạt động ...Tạo một CLLocationCoordinate2D mới tại Latitude/Kinh độ tùy chỉnh

Tôi đang cố gắng lặp qua một số XML mà tôi nhận được và phân tích vĩ độ và kinh độ của một tọa độ trong XML và lưu trữ nó trong một mảng mà từ đó tôi sẽ vẽ nó.

Vấn đề của tôi là không có vấn đề gì tôi sử dụng loại, làm thế nào tôi đúc nó, những gì có bạn, xcode LUÔN LUÔN tìm thấy một số loại vấn đề với nó.

phần có liên quan của file .h của tôi:

CLLocationCoordinate2D Coord; 
CLLocationDegrees lat; 
CLLocationDegrees lon; 

@property (nonatomic, readwrite) CLLocationCoordinate2D Coord; 
@property (nonatomic, readwrite) CLLocationDegrees lat; 
@property (nonatomic, readwrite) CLLocationDegrees lon; 

phần có liên quan của tập tin .m tôi:

else if ([elementName isEqualToString:@"Lat"]) { 
     checkpoint.lat = [[attributeDict objectForKey:@"degrees"] integerValue]; 
} 
else if ([elementName isEqualToString:@"Lon"]) { 
    checkpoint.lon = [[attributeDict objectForKey:@"degrees"] integerValue]; 
} 
else if ([elementName isEqualToString:@"Coord"]) { 
    checkpoint.Coord = [[CLLocation alloc] initWithLatitude:checkpoint.lat longitude:checkpoint.lon]; 
} 

Các lỗi hiện tại mà tôi đang nhận được là: "Chuyển nhượng để 'CLLocationCoordinate2D từ không phù hợp tôi lấy điều đó để có nghĩa là giá trị trả về của hàm khởi tạo không đúng, nhưng tôi không biết tại sao nó lại có chức năng ...

Tôi cũng có cố gắng điều gì sẽ làm cho ý nghĩa nhất đối với tôi mà tôi thấy người khác làm:

checkpoint.Coord = CLLocationCoordinate2DMake(checkpoint.lat, checkpoint.lon); 

Trong khi đó trả về không có lỗi ngay lập tức, khi tôi cố gắng xây dựng và chạy nó mang lại cho tôi:

ký Không xác định cho kiến trúc i386: "_CLLocationCoordinate2DMake", được tham chiếu từ: - [XMLParser parser: didStartElement: namespaceURI: qualifiedName: attributes:] trong Checkpoint.o ld: biểu tượng (s) không tìm thấy cho kiến ​​trúc i386 collect2: ld trả về 1 trạng thái thoát

Bất kỳ trợ giúp/giải thích/nudges đúng hướng sẽ được rất nhiều đánh giá cao bởi vì tôi rất ra khỏi ý tưởng vào thời điểm này.

+5

Không bao giờ cảm thấy xấu khi đặt câu hỏi đơn giản như vậy; đó là những gì chúng tôi đang ở đây. –

Trả lời

49

Điều gì có ý nghĩa nhất đối với bạn (CLLocationCoordinate2DMake) là chính xác. Bạn vừa quên bao gồm khung công tác CoreLocation trong dự án của mình.

Và, như những người khác đã chỉ ra, lat/lon của bạn trong tệp của bạn có thể không phải là số nguyên.

+0

Ah có ý nghĩa, tôi nghĩ rằng nó đã làm với một khuôn khổ bị thiếu>.

2

thử thay đổi

[[attributeDict objectForKey:@"degrees"] integerValue] 

vào

[[attributeDict objectForKey:@"degrees"] floatValue] 

cũng

checkpoint.Coord = [[CLLocation alloc] .... 

không thể đúng như bạn định nghĩa như là Coord CLLocationCoordinate2D, đó là

  • không phải là một CLLocation
  • không phải là một lớp nhưng một struct

những gì bạn cần làm là:

CLLocationCoordinate2D coordinate;  

    else if ([elementName isEqualToString:@"Lat"]) { 
     coordinate.latitude = [[attributeDict objectForKey:@"degrees"] floatValue]; 
    } 
    else if ([elementName isEqualToString:@"Lon"]) { 
     coordinate.longitude = [[attributeDict objectForKey:@"degrees"] floatValue]; 
    } 

    checkpoint.Coord = coordinate; 
+0

Hey Joris, cảm ơn bạn đã trả lời nhanh! Tôi đánh giá cao việc làm rõ và nó làm cho một chút ý nghĩa. Tôi đã đưa ra những thay đổi bạn đã đề xuất một cảnh quay và tôi đã nhận được lỗi "Expression is not assignable". Mã của tôi giống với những gì bạn đề xuất, tôi không thực sự có bất kỳ ý tưởng tại sao xcode không chấp nhận. Nếu có bất kỳ cách nào tôi có thể cung cấp cho bạn thêm thông tin cho tôi biết và tôi sẽ chỉnh sửa câu hỏi chính! Cảm ơn bạn! –

+0

Tôi đã thay đổi mã. Điều này sẽ làm việc –

+0

Nhận ra điều này là khá cũ, nhưng loại CLLocationDegrees (mà CLLocationCoordinate2d được tạo thành) là một đôi chứ không phải là một phao ... tùy thuộc vào độ phân giải bạn cần, bạn muốn gọi doubleValue thay vì floatValue. –

4

này nên làm việc.

CLLocationCoordinate2D center; 
..... 
else if ([elementName isEqualToString:@"Lat"]) { 
    center.latitude = [[attributeDict objectForKey:@"degrees"] doubleValue]; 
} 
else if ([elementName isEqualToString:@"Lon"]) { 
    center.longitude = [[attributeDict objectForKey:@"degrees"] doubleValue]; 
} 
+0

Xin chào Kal, cảm ơn vì đã trả lời nhanh nhưng không may là tôi nhận được cùng một lỗi khi đề xuất của Joris đưa tôi đến. Nếu bạn (hoặc Joris) có bất kỳ ý tưởng về lý do tại sao, tôi rất muốn cung cấp cho họ một shot. Cảm ơn! –

6

những gì tôi đã làm là: đầu tiên tạo ra một CLLocationCoordinate2D:

CLLocationCoordinate2D c2D = CLLocationCoordinate2DMake(CLLocationDegrees latitude, CLLocationDegrees longitude); 

vĩ độ và kinh độ của tôi là loại kép.

trong Nội dung nhập của bạn để đảm bảo thư viện Mapkit được nhập.

#import <MapKit/MapKit.h> 
Các vấn đề liên quan