如果地址线不存在,则将地址行留空(Objective-C)

时间:2015-10-26 16:16:04

标签: ios objective-c cllocationmanager cllocation

我的应用找到用户的位置,并在标签中显示地址。问题在于,如果某个地方没有某些东西,例如邮政编码,那么该行就会显示(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);

    }

}];

}

3 个答案:

答案 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对象字符串成员时出现了一些解析错误。