2013-04-15 4 views
1

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

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

- (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); 
     } 
    } ]; 
} 
+0

привет, пожалуйста, задайте вопрос тщательно. Это должно помочь .. –

ответ

2

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

UPDATE:

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; 
+0

Если я попытаюсь использовать этот, и он равен нулю, у меня будет запятая с пустым пространством между ними. Я бы лучше удалил запятую, если метка нулевой. – BalestraPatrick

+0

Более сложная версия этого будет: 'NSString * subAdministrativeArea = placemark.subAdministrativeArea? placemark.sAdministrativeArea: @ ""; '. – rmaddy

+0

BTW - это недопустимо: 'if ([placemark.subAdministrativeArea isEqual: nil]) {'. Вы действительно хотите: 'if (placemark.subAdministrativeArea == nil) {' or: 'if (! Placemark.subAdministrativeArea) {'. – rmaddy

2

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

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 
+0

Меня интересует второй вариант. Не могли бы вы объяснить, что такое синтаксис? – BalestraPatrick

+0

Оператор '?:' Является стандартным оператором С. В общем, это '? : '. – rmaddy

+0

@patapple См. Мое обновление. Когда я впервые ответил, я не заметил запятых. Поскольку вам не нужны дополнительные запятые из-за значений «nil», мой первый вариант - намного лучший выбор. Это гораздо более многословный, но он дает правильные результаты. – rmaddy