locationManager избегайте (нулевой) строки в метке

У меня есть код, который находит местоположение пользователя и возвращает его в метку. В некоторых случаях subAdministrativeArea недоступна или проезжая часть, и я хочу изменить свою строку, чтобы она не отображалась (null). Я пытался с некоторыми, если проверить это, но есть проблема, если (ноль) более одного. У кого-нибудь есть идеи по этому поводу?

Вот мой текущий код, который необходимо изменить, чтобы определить, равен ли объект метки нулю:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
        CLLocation *currentLocation = newLocation;
        [location stopUpdatingLocation];

        [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error == nil && [placemarks count] > 0) {
            placemark = [placemarks lastObject];

            countryDetected = placemark.ISOcountryCode;
            placeLabel.text = [NSString stringWithFormat:@"%@, %@, %@, %@, %@ %@", placemark.country, placemark.subAdministrativeArea, placemark.subLocality, placemark.postalCode, placemark.thoroughfare, placemark.subThoroughfare];
            userPlace = [NSString stringWithFormat:@"%@, %@, %@, %@, %@ %@", placemark.country, placemark.subAdministrativeArea, placemark.subLocality, placemark.postalCode, placemark.thoroughfare, placemark.subThoroughfare];

        } else {
            NSLog(@"%@", error.debugDescription);
        }
    } ];
}

person BalestraPatrick    schedule 15.04.2013    source источник
comment
привет, пожалуйста, задайте вопрос подробно. Это должно помочь..   -  person simbesi.com    schedule 15.04.2013


Ответы (2)


попробуйте это.. если placemark.subAdministrativeArea равно nil, тогда вы можете написать свою собственную строку в условии if, в противном случае установите значение placemark.subAdministrativeArea в строковую переменную и назначьте это UILable...

ОБНОВЛЕНИЕ:

NSMutableString *strLblTexts = [[NSMutableString alloc] init];
if (placemark.country != nil) {
        [strLblTexts appendString:placemark.country];
}
if (placemark.subAdministrativeArea != nil) {
        if ([strLblTexts isEqualToString:@""]||[strLblTexts isEqual:nil]) {
        [strLblTexts appendString:placemark.subAdministrativeArea];
    }
    else{
        NSString *strtemp=[NSString stringWithFormat:@",%@",placemark.subAdministrativeArea];

        NSLog(@">>>>>>>>>>>>> str temp :%@", strtemp);
        [strLblTexts appendString:strtemp];
    }
}
if (placemark.subLocality != nil) {
        if ([strLblTexts isEqualToString:@""]||[strLblTexts isEqual:nil]) {
        [strLblTexts appendString:placemark.subLocality];
    }
    else{
        NSString *strtemp=[NSString stringWithFormat:@",%@",placemark.subLocality];

        NSLog(@">>>>>>>>>>>>> str temp :%@", strtemp);
        [strLblTexts appendString:strtemp];
    }
}

Сделайте то же самое, что и в другом поле 3, и, наконец, установите это значение на UILable, как показано ниже...

placeLabel.text = strLblTexts;
person Paras Joshi    schedule 15.04.2013
comment
Если я попытаюсь использовать этот, и он будет равен нулю, у меня будет запятая с пустым пространством между ними. Я бы лучше удалил запятую, если метка равна нулю. - person BalestraPatrick; 15.04.2013
comment
Гораздо более краткая версия этого была бы: NSString *subAdministrativeArea = placemark.subAdministrativeArea ? placemark.subAdministrativeArea : @"";. - person rmaddy; 15.04.2013
comment
Кстати, это неверно: if ([placemark.subAdministrativeArea isEqual:nil]) {. На самом деле вы хотите: if (placemark.subAdministrativeArea == nil) { или: if (!placemark.subAdministrativeArea) {. - person rmaddy; 15.04.2013
comment
@rmaddy да, это легко, а также заполнить всего одну строку ... и я не реализую это, потому что вы уже публикуете этот тип входа в свой ответ .. :) - person Paras Joshi; 15.04.2013
comment
@patapple, из которого вы хотите удалить запятую?? - person Paras Joshi; 15.04.2013
comment
Из финальной этикетки. Теперь это как Соединенные Штаты, (null), Нью-Йорк, и если я использую ваш, это Соединенные Штаты, , Нью-Йорк. Лучше всего будет Соединенные Штаты, Нью-Йорк. - person BalestraPatrick; 15.04.2013
comment
@patapple о, тогда легко просто определить этот код в условии if и else, подождите, я опубликую ... - person Paras Joshi; 15.04.2013
comment
@patapple здесь вы получаете точный вывод, который вы определили в комментарии выше ... попробуйте этот код :) - person Paras Joshi; 15.04.2013
comment
Это уже пробовал. Я добавил if и else, но если более одной метки имеют значение null, в метке отображается значение null. - person BalestraPatrick; 15.04.2013
comment
о, тогда здесь вы проверяете каждое поле и добавляете или объединяете другую строку, а затем назначаете UILable ... подождите, я опубликую ответ ... - person Paras Joshi; 15.04.2013
comment
Я попробую это в ближайшее время. Напишу еще раз, если получится :) - person BalestraPatrick; 15.04.2013
comment
k чувак... просто напиши код, как и другие, с еще этими 3 полями placemark.postalCode, placemark.thoroughfare, placemark.subThoroughfare... и все заработает... :) - person Paras Joshi; 15.04.2013

Два варианта:

1) Используйте NSMutableString и добавляйте только ненулевые значения

2) Обновите текущее решение, чтобы каждый параметр выглядел так:

placemark.country ? placemark.country : @"", placemark.subAdministrativeArea ? placemark.subAdministrativeArea : @"", ...

Обновление: я не заметил запятых в исходном вопросе. Из-за того, что они есть, ваш лучший вариант - вариант 1:

NSMutableString *label = [NSMutableString string];
if (placemark.country) {
    [label appendString:placemark.country];
}
if (placemark.subAdministrativeArea) {
    if (label.length) {
        [label appendString:@", "];
    }
    [label appendString:placemark.subAdministrativeArea];
}
// and the rest
person rmaddy    schedule 15.04.2013
comment
Меня интересует второй вариант. Не могли бы вы уточнить, что это за синтаксис? - person BalestraPatrick; 15.04.2013
comment
Оператор ?: является стандартным оператором C. В общем это <condition> ? <true value> : <false value>. - person rmaddy; 15.04.2013
comment
@patapple Смотрите мое обновление. Я не заметил запятых, когда первый раз отвечал. Поскольку вам не нужны лишние запятые из-за значений nil, мой первый вариант гораздо лучше. Это намного более подробно, но дает правильные результаты. - person rmaddy; 15.04.2013
comment
Извините, но я не понимаю, как использовать NSMutableString. Почему вы делаете if (placemark.country) и if(label.length)? - person BalestraPatrick; 15.04.2013
comment
Я думаю, что appendString - лучший способ. Нужно выяснить, как реализовать это для всего моего кода :) - person BalestraPatrick; 15.04.2013