0

私には、答えが見つからないかなり緊急の問題があります。iPhone アプリケーションで Google マップ API を使用して、現在地と目的地の間のパスを描画しようとしています。Google からデータを取得し、JSON をエラーなしで解析し、ポリラインをデコードしてから、次のメソッドを使用します。

-(void) loadRouteWithPoints:(NSArray *) routes
{
    CLLocationCoordinate2D coords[[routes count]];
    for(int i = 0; i < routes.count; i++)
    {
        CLLocation* loc = (CLLocation*)[NSKeyedUnarchiver unarchiveObjectWithData:[routes objectAtIndex:i]];
        CLLocationCoordinate2D c;
        c.latitude  = loc.coordinate.latitude;
        c.longitude = loc.coordinate.longitude;
        coords[i]   = c;
    }

    MKPolyline *line = [MKPolyline polylineWithCoordinates:(CLLocationCoordinate2D*)coords count:[routes count]];
    [self.mapsView addOverlay:line];    
}

これは、これを言うと例外をスローします[NSKeyedUnarchiver unarchiveObjectWithData:[routes objectAtIndex:i]];:

「-[CLLocation バイト]: 認識されないセレクターがインスタンスに送信されました」

パラメータとして送信する配列は、ポリラインをデコードした後に取得する配列であり、 nil ではありません。私のテストでは、47 個の値があります。それらを見ることができ、各エントリは次のようになります。

<+44.47874069,+26.10523033> +/- 0.00m (速度 -1.00 mps / コース -1.00) @ 6/29/12 17:09:37 東ヨーロッパ夏時間

このクラッシュの原因とそれを修正する方法について何か考えはありますか?

4

1 に答える 1

0

ここでのエラーは、[routes objectAtIndex:x] にあると思われる値が、あなたが考えているものではない可能性があることを示しています。

[routes objectAtIndex:x] で取得されたオブジェクトのクラスの種類が正確に何であるかを確認して、行を区切ってみてください。おそらく答えが得られるでしょう。

オブジェクトがすでに CLLocation であり、エンコードを解除する必要がない可能性があります…</p>

于 2012-06-29T23:58:56.517 に答える