我的应用找到用户的位置,并在标签中显示地址。问题在于,如果某个地方没有某些东西,例如邮政编码,那么该行就会显示(null)
。如何将该行留空?我想它必须以某种方式设置为nil
......
请帮忙!
这是我的代码:
- (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 :(得分:1)
此代码检查nil的所有字段(导致<null>
输出)并用空字符串替换nil
值。
NSString *locationString = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@",
placeMark.subThoroughfare ?: @"",
placeMark.thoroughfare ?: @"",
placeMark.postalCode ?: @"",
placeMark.locality ?: @"",
placeMark.administrativeArea ?: @"",
placeMark.country ?: @""];
答案 1 :(得分:0)
您确实需要编写代码来检查缺少的字段并正确处理它们。
考虑到如果缺少某些项目,结果字符串中可能会出现空行。
答案 2 :(得分:0)
快速和(非常)肮脏的解决方案,但可能会发现它可读:
替换placeMark.postalCode,
带
placeMark.postalCode ? placeMark.postalCode : @"",
对于nil
,您不想要的任何内容(或其他任何字符串)
或者只是编写自定义代码来检查局部变量中的每个元素。
-
修改强>
在远程情况下,您实际上有一个包含"(null)"
的字符串,您可能需要考虑检查此值,然后再次替换每行:
[placeMark.postalCode isEqualToString:@"(null)"]? @"" : placeMark.postalCode,
无论如何都要考虑你应该在你的逻辑中更早地处理这个问题,可能是在创建placeMark对象字符串成员时出现了一些解析错误。