2015-10-26 2 views
0

Мое приложение находит местоположение пользователя и показывает адрес на этикетке. Проблема в том, что если что-то не существует в определенном месте, например, почтовый код, тогда строка говорит (null). Как сделать эту строку пустой? Я полагаю, что он должен быть установлен на nil как-то где-то ...Сделать строки адреса пустыми, если они не существуют (Objective-C)

Пожалуйста, помогите!

Вот мой код:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 

NSLog(@"Location: %@", newLocation); 
CLLocation *currentLocation = newLocation; 

[geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) { 

    if (error == nil && [placemarks count] > 0) { 

     placeMark = [placemarks lastObject]; 

     NSString *locationString = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@", 
            placeMark.subThoroughfare, 
            placeMark.thoroughfare, 
            placeMark.postalCode, 
            placeMark.locality, 
            placeMark.administrativeArea, 
            placeMark.country]; 

     locationLabel.text = locationString; 

    } 

    else { 

     NSLog(@"%@", error.debugDescription); 

    } 

}]; 

} 

ответ

0

Быстрая и (очень) грязный раствор, но из них могут найти его читаемым:

заменителем placeMark.postalCode,

с

placeMark.postalCode ? placeMark.postalCode : @"", 

для каждого элемента, который вы не хотите ничего (или любой другой строки) в появляются в случае nil.

Или просто напишите собственный код для проверки каждого элемента в локальных переменных.

-

Edit: В отдаленном случае, если вы на самом деле есть строка, содержащая "(null)" вы можете рассмотреть вопрос о проверке этого значения, заменяющего снова каждую строку с:

[placeMark.postalCode isEqualToString:@"(null)"]? @"" : placeMark.postalCode, 

во всяком случае, подумайте, что вы должны позаботиться об этом раньше в своей логике, возможно, при разборе элементов-объектов объекта placeMark возникла ошибка.

+0

Он по-прежнему говорит (нуль) ... – Yomo

+0

Uhmm вы можете действительно есть NSString с «(нуль)» содержание, то, что это очень плохо, вы должны проверить ранее при создании объекта Placemark тогда. В таком случае посмотрите на редактирование в ответе – jalone

+0

Ничего, я допустил ошибку. Это работает ... Но теперь есть пустая строка, которая разрушает ее. Разве я не могу как-то «обмануть» его? – Yomo

0

Вам действительно нужно написать код для проверки отсутствующих полей и обрабатывать их соответствующим образом.

Учтите, что если некоторые из элементов отсутствуют, могут быть пустые строки в результирующей строке.

0

Этот код проверяет все поля для nil (что вызывает вывод <null>) и заменяет значения nil пустой строкой.

NSString *locationString = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@", 
           placeMark.subThoroughfare ?: @"", 
           placeMark.thoroughfare ?: @"", 
           placeMark.postalCode ?: @"", 
           placeMark.locality ?: @"", 
           placeMark.administrativeArea ?: @"", 
           placeMark.country ?: @""]; 
+1

Каждый '??' должно быть '?: ' – rmaddy

+0

Другая проблема заключается в том, что строка может содержать пустые строки, что, вероятно, нежелательно. – zaph

+0

@maddy: Верно, спасибо, я думал, что ObjC также поддерживает оператора коалесценции nil. – vadian

Смежные вопросы