2010-05-31 38 views
6

Hiện tại tôi đang phát triển một ứng dụng iPhone, nơi tôi phải hiển thị thành phố và vị trí hiện tại của người dùng mà tôi đang sử dụng Mapkit Framework.When tôi xây dựng ứng dụng hoạt động tốt và cho tôi biết chi tiết chính xác của thành phố. nhưng ngay bây giờ khi tôi cố gắng xây dựng lại ứng dụng ứng dụng hiển thị thông báo lỗi sau đây trong nhật ký của tôiMáy chủ MKReverseGeocoder trả về lỗi: 503

/SourceCache/ProtocolBuffer_Sim/ProtocolBuffer-26/Runtime/PBRequester.m:523 máy chủ trả về lỗi: 503

reverseGeocoder: didFailWithError: Tên miền lỗi = PBRequesterErrorDomain Code = 6001 "Không thể hoàn tất thao tác. (PBRequesterErrorDomain error 6001.)"

Có cơ thể nào đối mặt với cùng một vấn đề không và cách tôi có thể giải quyết vấn đề đó?

+0

Hiện tôi đang gặp vấn đề này. Tìm thấy một cách để có được xung quanh nó? – Neelesh

Trả lời

9

Tôi khá chắc chắn điều này đang xảy ra vì bạn đang thử nghiệm và sử dụng trình mã hóa địa lý đảo ngược quá nhiều và máy chủ của Google biết điều đó. Vì vậy, nó đã cơ bản bị chặn bạn trong một thời gian. Hãy thử lại sau và xem nó có hoạt động không.

Bạn cần đảm bảo rằng bạn không gọi cho trình mã hóa địa lý hơn 60 giây một lần.

+0

Xin chào, Nic bạn nói đúng là ứng dụng hiển thị thông báo lỗi này tối đa 1 giờ chiều ở Ấn Độ và sau đó nó hoạt động tốt, tôi nghĩ rằng Google có thể đang cập nhật máy chủ của họ vào lúc này. – raaz

+0

Tốt, vui lòng đánh dấu câu trả lời này là đã trả lời. –

+0

Đó có phải là lý do nghiêm trọng không? Tôi có một pin mà người dùng có thể kéo xung quanh và nó cập nhật với địa chỉ mới ... Nếu đây là trường hợp, người dùng sẽ không thể kéo pin xung quanh và thấy nó cập nhật trừ khi nó ít hơn một lần mỗi 60 giây ...! – jowie

0

Có thể xảy ra ngẫu nhiên, tùy thuộc vào trạng thái của máy chủ.

2

Tôi tìm hiểu!
Vâng, bây giờ chúng ta sẽ phải sử dụng CLGeocoder, nhưng nếu bạn vẫn muốn sử dụng MKReverseGeocoder, bạn PHẢI không gọi [geocoder start] hai lần, ngay cả khi đối tượng mã hóa địa lý là một đối tượng mới! Ví dụ, KHÔNG làm điều này:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
     MKReverseGeocoder *geoCoder = [[[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate] autorelease]; 
     geoCoder.delegate = self; 
     [geoCoder start]; 
} 

Hoặc bạn sẽ nhận được một arror: người quản lý vị trí chức năng cập nhật vị trí được gọi là càng sớm càng một vị trí mới được phát hiện. Khi độ chính xác ngày càng tốt hơn, một posistion mới tươi mới được gửi đến "didUpdateToLocation".
Nhưng tạo một đối tượng mới MKReverseGeocoder mỗi lần tìm thấy một vị trí là một ý tưởng tồi! Vì vậy, bạn có một vài giải pháp:
- Đặt boolean đúng khi khởi động bộ mã hóa địa lý. Sau đó, trong didFindPlacemark (trình mã hóa địa lý), bạn nên dừng trình mã hóa địa lý bằng [hủy bộ mã hóa địa lý] và đặt boolean thành false.
- Biến biến mã địa lý không phải cục bộ và manange [hủy mã hóa địa lý] + thực hiện và tạo một mã mới và [khởi động geocoder] mỗi lần didUpdateToLocation được gọi là beeing.
- Bất kỳ cách nào khác để tránh [bộ mã hóa địa lý bắt đầu] được gọi hai lần

Tôi đã sử dụng giải pháp đầu tiên và không bao giờ gặp lỗi 503 nữa.

+0

Thật không may đã không làm việc cho tôi. Ngay cả hủy bỏ nó mỗi lần, MKReverseGeocoder ném một 503 nếu nó được gọi là quá thường xuyên. – jowie

2

Đối với tôi, MKReverseGeocoder không hoạt động với 503 quá nhiều lần. Nó cũng sẽ thất bại trong lần đầu tiên nó được yêu cầu, sau 60 giây đã trôi qua. Kết quả là, tôi quyết định từ bỏ việc sử dụng nó và thay vào đó quyết định truy cập API của Google trực tiếp bằng NSURLRequest thông qua dịch vụ tôi đã tạo cũng phân tích kết quả dưới dạng Chuỗi JSON bằng cách sử dụng Khung SBJSON (rất hữu ích).

Từ dịch vụ của tôi, tôi gọi là URL sau như sau:

NSString *urlStr = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&sensor=true", coordinate.latitude, coordinate.longitude]; 

nơi coordinate là một CLLocationCoordinate2D.

Tôi nhận thấy đây là một chặng đường dài xung quanh vấn đề, nhưng kể từ khi chuyển đổi sang hệ thống này, tôi không có vấn đề gì!

+0

Đây là một lựa chọn thực sự tốt cho 'MKReverseGeocoder'! – venj

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