0

Google Places API を iPhone プロジェクトで動作させようとしています。さて、約1時間前に動作していましたが、動作を停止するために何をしたのかわかりません. どんな助けでも大歓迎です。

これが私がこれまでに持っているものです:

- (NSString *)searchString {
    // this mutable string allows me to dynamically create the search string
    // we start with the static part of the api search URL
    NSMutableString *result = [NSMutableString stringWithString:@"https://maps.googleapis.com/maps/api/place/search/json?location="];

    // since I need to get the user's location, I need to create a location manager
    CLLocationManager *locationManager = [[CLLocationManager alloc] init];

    // we need to now update the current location,
    // otherwise there will be no coordinates
    [locationManager startUpdatingLocation];

    // now that it's updated, we stop it because I
    // am not tracking anything
    [locationManager stopUpdatingLocation];

    // this appends the lattitude/longitude, as double values, into the URL
    [result appendFormat:@"%g,%g", [[locationManager location] coordinate].latitude, [[locationManager location] coordinate].longitude];

    // release the location manager for memory management
    [locationManager release];

    // if a filter is present, add the keyword item to try to filter
    // the results
    if([[self filterString] length] > 0) {
        [result appendFormat:@"&keyword=%@", filterString];
    }

    // add the rest of the validated URL now
    //[result appendString:@"&types=food|meal_delivery|meal_takeaway|restaurant&rankby=distance&sensor=true&key=AIzaSyBmO_f6h4_Q0xArw6tdxUF7TH7rZpaiFfQ"];
    [result appendString:@"&types=food&rankby=distance&sensor=true&key=mykey"];

    // log the result for testing
    NSLog(@"Completed Search String: %@", result);

    return result;

}

ここで、ログを見て、「完了した検索文字列」を Safari にコピーすると、必要な結果が表示されます。

しかし、次のコードを使用すると、アプリがハングします。

- (void)performSearch {

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[self searchString]]]; // hangs on this line!

    NSDictionary *jsonDictionary = [data objectFromJSONData];
    NSArray *resultsArray = [jsonDictionary objectForKey:@"results"];

    currentList = [ARGooglePlace placesWithArray:resultsArray];

    [self.tableView reloadData];
}

私は、JSONKit を使用して JSON 解析を行っていることに言及する必要があると思います。また、ARGooglePlace はカスタム クラスであり、現在は関係ありません (そこに到達することさえできません...)。

ご協力いただきありがとうございます。

4

1 に答える 1

0

ロケーション マネージャーと緯度/経度を searchString メソッドから引き出します。それを performSearch メソッドに入れるだけです。代わりに、ロケーション マネージャーから受け取った緯度/経度を searchString に渡します。

ロケーション マネージャーとのタイミングの問題のようです。以前はロケーションマネージャーがロケーションデータをキャッシュしていたので、以前は機能していた可能性があります...そして正しい座標を取得することができました.

2+ 考えられるシナリオ:

1) ロケーション マネージャーが座標を更新せず、そこにぶら下がっているという問題 2) Google Web サイトが原因である (データの読み込みが多すぎる??)

ロケーションマネージャーを searchString メソッドから引き出すと、原因を特定するのに役立ちます...そして、緯度/経度の値を直接渡すだけで、Google Webサイトもテストできます.

于 2012-04-17T20:46:26.770 に答える