2014-05-25 4 views
2

У меня есть приложение, в котором я показываю текущую позицию пользователя по адресу. Проблема заключается в том, что, если, например, Почтовый код или Административный район недоступен, строка печатает (null), где это значение должно оставаться - все остальные данные есть.Удалить «(null)» из строки, если нет значения

Пример:

(нуль) Дорога № 19

(нуль) Mumbai

Махараштра


Что мне было интересно, было ли это можно было просто пустое место вместо (null)?

Мой текущий код:

_addressLabel.text = [NSString stringWithFormat: @"%@ %@\n%@ %@\n%@", 
           placemark.subThoroughfare, placemark.thoroughfare, 
           placemark.postalCode, placemark.locality, 
            placemark.administrativeArea]; 

ответ

5

Это очень легко сделать с NSString методом

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement 

Например, после того, как вы заселены вашей _addressLabel.text строки все (возможно, нолем) значений, просто заменить вхождение нежелательного string с нужной строкой. Например, следующее решение вашей проблемы.

_addressLabel.text = [NSString stringWithFormat: @"%@ %@\n%@ %@\n%@", 
           placemark.subThoroughfare, placemark.thoroughfare, 
           placemark.postalCode, placemark.locality, 
            placemark.administrativeArea]; 
// that string may contain nil values, so remove them. 

NSString *undesired = @"(null)"; 
NSString *desired = @"\n"; 

_addressLabel.text = [_addressLabel.text stringByReplacingOccurrencesOfString:undesired 
                    withString:desired]; 
+0

Он отлично работает, спасибо! – ThomasGulli

+0

@ThomasGulli Нет проблем, большой вопрос –

+1

Нет неуважения к Брайан-Трейси за то, что вы дали подходящий ответ на вопрос, но @ThomasGulli, это ужасный способ сделать что-то.Если строка из метки отмечена нулевой, ее не следует отображать в первую очередь. Кроме того, как сказал Томас Темпельман в своем ответе ниже, если Apple решит изменить формат NULL или nil, вам придется заменить этот метод в своем приложении. Так почему бы не спасти себя от неприятностей и сделать это гораздо лучше и эффективнее? –

3

Используйте NSMutableString, и есть некоторые, если заявления, которые добавить строку к нему, если значение не [NSNull null] или nil.

CLPlacemark *placemark = ...; 
NSMutableString *address = [NSMutableString string]; 
if (placemark.subThoroughfare) { 
    [address appendString:placemark.subThoroughfare]; 
} 
if (...) { 
    [address appendFormat:@"%@\n", ...]; 
} 
// etc... 
_addressLabel.text = address; 
1

Я считаю, что решение для чистых (*) заключается в использовании "?" оператор здесь, как это, для каждой из строковых значений:

Вместо placemark.subThoroughfare записи:

(placemark.subThoroughfare ? placemark.subThoroughfare : @"") 

или еще короче:

(placemark.subThoroughfare ?: @"") 

Это будет проверить, если значение равно NULL (или nil) - если он не равен нулю, он будет использовать значение строки, иначе он будет использовать строку, содержащую пробел.

  • Это чище, потому что мое решение не зависит от того, как NULL строк печатаются, то есть, если они получают напечатаны в будущей версии операционной системы, как (ноль) вместо (нуля), то мое решение все равно будет работать, в то время как Брайан Трейси не будет. Не то чтобы я ожидал, что это проблема, когда-либо, просто указывая, что является более правильным решением проблемы, для тех, кто заботится о том, что происходит за кулисами.
+0

'placemark.subThoroughfare?: @" " –

+0

@max_ исправлено, спасибо. –

2

Используйте это, чтобы заменить пустой с пустой строкой

addressLabel.text = [NSString stringWithFormat: @"%@ %@\n%@ %@\n%@", 
          placemark.subThoroughfare?:@"", placemark.thoroughfare?:@"", 
          placemark.postalCode?:@"", placemark.locality?:@"", 
           placemark.administrativeArea?:@""]; 
Смежные вопросы