由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'JSON写入中的类型无效(NSConcreteValue)

时间:2019-06-19 06:42:50

标签: ios objective-c nsjsonserialization nsvalue

这是我的字典:

 { @"RoutePolyline":<__NSArrayM 0x283983750>(<c59272f7 39263940      55a4c2d8 42f65240>),
    @"RideID":6565
};

我正在将此字典作为API调用中的参数发送。

我的应用程序在以下代码行崩溃:

 NSData *postData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];

这是它引发的错误:

  

由于未捕获的异常而终止应用程序   'NSInvalidArgumentException',原因:'JSON写入中的类型无效   (NSConcreteValue)”

我知道RoutePolyline参数持有一个NSValue(它应该是一个坐标数组),而不是任何对象类型,但是我尝试了很多转换,但是到目前为止没有任何效果。例如

[NSValue valueWithMKCoordinate:*routeCoordinates]

2 个答案:

答案 0 :(得分:2)

遍历NSValue数组并提取CLLocationCoordinate2D的值。

for (NSValue *value in coordinates) {
    CLLocationCoordinate2D coordinate;
    [value getValue:&coordinate];
    NSDictionary *coDic = @{@"latitude" : [NSNumber numberWithDouble: coordinate.latitude],
                            @"longitude": [NSNumber numberWithDouble: coordinate.longitude]};
    [array addObject:coDic];
}

还要在序列化之前检查字典是否为有效JSON

if ([NSJSONSerialization isValidJSONObject:dic]) {
    NSData *postData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];
}

答案 1 :(得分:0)

首先获取坐标(纬度)值并存储到数组中,然后可以序列化,它不会崩溃。尝试在api中使用NSString值:

NSArray *arr = @[ @{@“lat”: [NSString stringWithFormat:@"%ld",routeCoordinates.latitude],
                    @“long”:[NSString stringWithFormat:@"%ld",routeCoordinates.longitude]
                }];