CLGeocoder връща (null) в NSString, но не и в NSLog

Имам проблем с CLGeocoder, ако се опитам да получа името на адреса с помощта на CLGeocoder и текущите координати на потребителя, той правилно връща името на адреса, пощенския код, държавата и т.н. в NSLog, но ако се опитам да изпратя тази информация в NSString [съдържа се в NSMutableArray, но не мисля, че това е проблемът] връща стойност (null). Подозирам, че този проблем е причинен от блока, който съм използвал в кода, но не съм сигурен и така или иначе не знам как да поправя този проблем.

Ето моят код:

- (NSArray *)dataArrayPosizione
{
    if (self.arrayPosizione == nil)
    {

        reverseGeocoder = [[CLGeocoder alloc] init];

        locationToReverseGeocode = [[CLLocation alloc]initWithLatitude:self.mapView.userLocation.location.coordinate.latitude longitude:self.mapView.userLocation.location.coordinate.longitude];

        [reverseGeocoder reverseGeocodeLocation:locationToReverseGeocode completionHandler:^(NSArray *placemarks, NSError *error)
        {
            if (placemarks && placemarks.count > 0)
            {
                placemark = placemarks[0];

                NSLog(@"\n%@ %@\n%@, %@, %@\n%@", [placemark subThoroughfare],[placemark thoroughfare], [placemark locality], [placemark administrativeArea], [placemark postalCode], [placemark country]);
            }
        }];

        informazioniPosizione = [NSMutableArray new];

        [informazioniPosizione addObject:[NSString stringWithFormat:@"Indirizzo: %@", [placemark country]]];
        [informazioniPosizione addObject:[NSString stringWithFormat:@"Latitudine: %g\u00B0\nLongitudine: %g\u00B0", self.mapView.userLocation.location.coordinate.latitude, self.mapView.userLocation.location.coordinate.longitude]];

        self.arrayPosizione = informazioniPosizione;
    }

    return self.arrayPosizione;
}

И снимка: въведете описание на изображението тук

Може ли някой да ми помогне с това? Ако публикуваният код не е достатъчен, за да разберете проблема, ще поставя още редове.

Благодаря


person Aluminum    schedule 27.01.2014    source източник


Отговори (2)


ГРЕШКА: референтният идентификатор на колона е двусмислен // със SQL =› ИЗБЕРЕТЕ марки.* ОТ марки ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ продукти НА products.brand_id = brands.id ГРУПИРАНЕ ПО id(този id) ORDER BY SUM(products.rank) DESC
person bachonk    schedule 27.01.2014
comment
Здравей @bachonk, пробвах твоя код, но това е резултатът :-/ i.imgur.com/kCo7ZvQ .png благодаря за отговора все пак :-) - person Aluminum; 27.01.2014
comment
Връщахте празен масив, преди блокът да бъде изпълнен. Актуализирах кода си съответно, но имайте предвид, че това не е най-препоръчителният начин за справяне с това. - person bachonk; 27.01.2014
comment
Не, какъв код и къде трябва да поставя, за да опресня своя UITableView? Благодаря ви за помощта и отделеното време :-) - person Aluminum; 27.01.2014
comment
Ако приемем, че табличният ви изглед използва self.arrayPosizione в своя източник на данни, ще искате да извикате [tableView reloadData] веднага след като зададете тази стойност в ред self.arrayPosizione = informazioniPosizione; - person bachonk; 27.01.2014

Блокът на CLGeocoder ще се изпълни асинхронно и следователно променливата за показалец все още не е зададена, когато се опитате да го използвате. Както bachonk предлага, преместете кода в блока на геокодера. След като добавите информацията за показалеца към масива, просто трябва да извикате -[UITableView reloadData] на вашия tableView и информацията ще се появи.

person Gianluca Tranchedone    schedule 27.01.2014