Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 不要重复添加注释_Ios - Fatal编程技术网

Ios 不要重复添加注释

Ios 不要重复添加注释,ios,Ios,我插入了一些来自json服务器的注释,但是我想检查注释是否已经在地图上,如果已经在地图上,就不再添加它。因为它们是相互叠加的,有人帮我解决这个问题吗 我的代码: // adiciona produtos ao mapa - (void)adicionaAnnotationsNoMapa:(id)objetos{ NSMutableArray *annotationsPins = [[NSMutableArray alloc] init]; for (NSDi

我插入了一些来自json服务器的注释,但是我想检查注释是否已经在地图上,如果已经在地图上,就不再添加它。因为它们是相互叠加的,有人帮我解决这个问题吗

我的代码:

  // adiciona produtos ao mapa
    - (void)adicionaAnnotationsNoMapa:(id)objetos{
        NSMutableArray *annotationsPins = [[NSMutableArray alloc] init];

    for (NSDictionary *annotationDeProdutos in objetos) {
        CLLocationCoordinate2D location;
        AnnotationMap *myAnn;
        myAnn = [[AnnotationMap alloc] init];
        location.latitude = [[annotationDeProdutos objectForKey:@"latitude"] floatValue];
        location.longitude = [[annotationDeProdutos objectForKey:@"longitude"] floatValue];
        myAnn.coordinate = location;
        myAnn.title = [annotationDeProdutos objectForKey:@"name"];
        myAnn.subtitle = [NSString stringWithFormat:@"R$ %@",[annotationDeProdutos objectForKey:@"price"]];
        myAnn.categoria = [NSString stringWithFormat:@"%@", [annotationDeProdutos objectForKey:@"id_categoria"]];
        myAnn.idProduto = [NSString stringWithFormat:@"%@", [annotationDeProdutos objectForKey:@"id"]];
        [annotationsPins addObject:myAnn];
    }

    [self.mapView addAnnotations:annotationsPins];
}

您可以遍历MkMapView上已经存在的注释,并查看它们是否已经存在:

NSArray * annotations = [self.mapView.annotations copy];
for (NSDictionary *annotationDeProdutos in objetos)
{
    // Check if annotation in annotations are duplicate of annotationDeProdutos.
    // You can match using name.
}
或者,如果只希望显示来自单个服务器调用的注释,则使用另一种方式:

[self.mapView removeAnnotations: self.mapView.annotations];
// Now add from JSON response.

您可以对每个批注执行此操作:

if(![self.mapView.annotations containsObject: myAnn]) {
    [self.mapView addAnnotations: myAnn];
}

我用这个代码解决了这个问题:

// adiciona produtos ao mapa
- (void)adicionaAnnotationsNoMapa:(id)objetos{
    NSMutableArray *annotationsPins = [[NSMutableArray alloc] init];

for (NSDictionary *annotationDeProdutos in objetos) {

    CLLocationCoordinate2D location;
    AnnotationMap *myAnn;
    myAnn = [[AnnotationMap alloc] init];
    location.latitude = [[annotationDeProdutos objectForKey:@"latitude"] floatValue];
    location.longitude = [[annotationDeProdutos objectForKey:@"longitude"] floatValue];
    myAnn.coordinate = location;
    myAnn.title = [annotationDeProdutos objectForKey:@"name"];
    myAnn.subtitle = [NSString stringWithFormat:@"R$ %@",[annotationDeProdutos objectForKey:@"price"]];
    myAnn.categoria = [NSString stringWithFormat:@"%@", [annotationDeProdutos objectForKey:@"id_categoria"]];
    myAnn.idProduto = [NSString stringWithFormat:@"%@", [annotationDeProdutos objectForKey:@"id"]];

    if (self.mapView.annotations.count <1) {
        [annotationsPins addObject:myAnn];
    } else {

        __block NSInteger foundIndex = NSNotFound;

        [annotationsPins enumerateObjectsUsingBlock:^(AnnotationMap *annotation, NSUInteger idx, BOOL *stop) {
            CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:location.latitude longitude:location.longitude];
            CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:annotation.coordinate.latitude longitude:annotation.coordinate.longitude];

            if ([loc1 distanceFromLocation:loc2] <= 1.0f) {
                foundIndex = idx;
                *stop = YES;
            }
        }];

        if (foundIndex != NSNotFound) {
            [annotationsPins addObject:myAnn];
        }
    }

}

[self.mapView addAnnotations:annotationsPins];
//adiciona produtos ao mapa
-(无效)adicionaAnnotationsNoMapa:(id)objetos{
NSMutableArray*annotationsPins=[[NSMutableArray alloc]init];
for(NSDictionary*对象中的注释deProdutos){
CLLOCATION坐标2D定位;
注释地图*myAnn;
myAnn=[[AnnotationMap alloc]init];
location.latitude=[[annotationDeProdutos objectForKey:@“latitude”]floatValue];
location.longitude=[[annotationDeProdutos objectForKey:@“longitude”]floatValue];
myAnn.坐标=位置;
myAnn.title=[annotationDeProdutos objectForKey:@“name”];
myAnn.subtitle=[NSString stringWithFormat:@“R$%@,[annotationDeProdutos objectForKey:@“price”];
myAnn.categoria=[NSString stringWithFormat:@“%@,[annotationDeProdutos objectForKey:@“id_categoria”];
myAnn.idProduto=[NSString stringWithFormat:@“%@,[annotationDeProdutos objectForKey:@“id”];

如果(self.mapView.annotations.count如何检查NSArray*批注上的批注是否重复?通过这种方式,它们仍然一个放置在另一个上。这是因为它们不是同一个批注,只是位于同一位置的批注,但具有不同的对象。您可以删除地图批注,然后添加其他批注在添加新的注释之前,请编辑新闻或比较注释的位置。