有一个应用程序,我在其中显示用户在地址中的当前位置。问题是,如果例如邮政编码或管理区域不可用,则字符串将打印(null)该值应保留的位置 - 所有其他数据都在那里。
示例:
(null)第19号路
(null)孟买
邦
我想知道的是,是否可以只有一个空格而不是(null)?
我目前的代码:
_addressLabel.text = [NSString stringWithFormat: @"%@ %@\n%@ %@\n%@",
placemark.subThoroughfare, placemark.thoroughfare,
placemark.postalCode, placemark.locality,
placemark.administrativeArea];
答案 0 :(得分:5)
使用NSString
方法
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
例如,在使用所有(可能为nil)值填充_addressLabel.text
字符串后,只需将所需字符串的出现替换为所需的字符串即可。例如,以下内容将解决您的问题。
_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];
答案 1 :(得分:3)
使用NSMutableString
,如果值不是[NSNull null]
或nil
,请使用一些if语句向其附加字符串。
CLPlacemark *placemark = ...;
NSMutableString *address = [NSMutableString string];
if (placemark.subThoroughfare) {
[address appendString:placemark.subThoroughfare];
}
if (...) {
[address appendFormat:@"%@\n", ...];
}
// etc...
_addressLabel.text = address;
答案 2 :(得分:2)
使用此选项将null替换为空字符串
addressLabel.text = [NSString stringWithFormat: @"%@ %@\n%@ %@\n%@",
placemark.subThoroughfare?:@"", placemark.thoroughfare?:@"",
placemark.postalCode?:@"", placemark.locality?:@"",
placemark.administrativeArea?:@""];
答案 3 :(得分:1)
我相信更清洁(*)的解决方案是使用"?"这里的运算符,对于每个字符串值都是这样的:
而不是placemark.subThoroughfare
写:
(placemark.subThoroughfare ? placemark.subThoroughfare : @"")
甚至更短:
(placemark.subThoroughfare ?: @"")
这将检查值是否为NULL(或nil) - 如果非零,则它将使用字符串的值,否则它将使用包含空格的字符串。