iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 使用MKPolyline在MKMapView中绘制多组线大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用此代码绘制一组行:

CLLOCATIOnCoordinate2D points[[routes count]];
for(int i = 0; i < self.routes.count; i++)
{
    CLLOCATIOn* LOCATIOn = [self.routes objectATindex:i];
    points[i] = CLLOCATIOnCoordinate2DMake(LOCATIOn.coordinate.latitude,LOCATIOn.coordinate
                                             .longitudE);
}
self.routeLine = [MKPolyline polylineWithCoordinates: points count: [routes count]];
[self.mapView setVisibleMapRect: [self.routeLine boundingMapRect] animated: YES];
[self.mapView addOverlay:self.routeLine];

并且它适用于来自NSArray *路由的一组线路,但现在我需要多组线路,例如NSMutableArray * routes = {NSArray with routes,NSArray with other group like first example,another array}像这样:

int sumaCount = [a1 count] + [a2 count] + [a3 count];
CLLOCATIOnCoordinate2D puntitos[sumaCount];
int c = 0;
for (NSArray *array in rutas)
{
    for (CLLOCATIOn *cada in array)
    {
        puntitos[c] = CLLOCATIOnCoordinate2DMake(cada.coordinate.latitude,cada.coordinate.longitudE);
        c++;
    }
    self.routeLine = [MKPolyline polylineWithCoordinates: puntitos count: sumaCount];
    [self.mapView addOverlay: self.routeLine];
}

但我得到这个例外:

*** TerminaTing app due to uncaught exception 'NSInvalidArgumentexception',reason: '***
 -[NSRegularExpression enumerateMatchesinstring:options:range:usingBlock:]: nil argument'

解决方法

有两个问题:提供的代码中的错误和异常.

代码错误

在完成puntitos结构的构建之前,您正在为所有sumaCount点添加叠加层(例如,第一次调用addOverlay时,您只添加了[a1 count]个点).你还假设a1,a2和a3都是rutas中的所有项目.如果你想连接它们,你应该:

>将addOverlay移出循环;和
>不要使用a1,a2和a3,而是通过rutas迭代来获取sumaCount

因此,如果您真的想将三组线路连接在一起,您会:

int sumaCount = 0;
for (NSArray *array in rutas)
    sumaCount += [array count];
CLLOCATIOnCoordinate2D puntitos[sumaCount];

int c = 0;
for (NSArray *array in rutas)
{
    for (CLLOCATIOn *cada in array)
    {
        puntitos[c] = CLLOCATIOnCoordinate2DMake(cada.coordinate.latitude,cada.coordinate.longitudE);
        c++;
    }
}

self.routeLine = [MKPolyline polylineWithCoordinates: puntitos count: sumaCount];
[self.mapView addOverlay: self.routeLine];

如果您正在处理三组不同的行,您应该:

for (NSArray *array in rutas)
{
    int sumaCount = [array count];
    CLLOCATIOnCoordinate2D puntitos[sumaCount];

    int c = 0;
    for (CLLOCATIOn *cada in array)
    {
        puntitos[c] = CLLOCATIOnCoordinate2DMake(cada.coordinate.latitude,cada.coordinate.longitudE);
        c++;
    }
    MKPolyline routeLine = [MKPolyline polylineWithCoordinates: puntitos count: c];
    [self.mapView addOverlay: routeLine];
}

注意在后一个例子中,我没有使用你的MKPolyline属性,而是使用本地var.如果您需要保留这些MKPolyline对象的数组,请继续执行此操作,但出于上述代码的目的,您不需要它.坦率地说,在第一个例子中,我可能也倾向于你一个本地的MKPolyline变量.为什么要将它保存在一个属性中?!?

例外

以上修复了列出的代码中的错误,但您的例外指出了另一个问题.它可能是你的代码(因为你第一次尝试创建MKPolyline是使用sumaCount点,但只设置了一些).但问题也可能在其他地方重置,因为异常不是您对代码错误的期望.你在代码中的其他地方进行任何正则表达式匹配吗?如果您确信问题出在代码本身,那么您可以

NSLog(@"rutas=%@",rutas);

就个人而言,如果正则表达式问题是由此引起的,我会感到惊讶,但原始问题中的代码肯定会引起一些意想不到的问题.我修复了代码,看看你的异常是否仍然存在.如果是,请添加此rutas日志语句,但更好的是,在项目中搜索NSRegularExpression并查看您可能在哪里使用它.你也可以turn on exception breakpoints(只需打开所有例外).

大佬总结

以上是大佬教程为你收集整理的ios – 使用MKPolyline在MKMapView中绘制多组线全部内容,希望文章能够帮你解决ios – 使用MKPolyline在MKMapView中绘制多组线所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。