-2

仅当名称以前不存在于数据数组中时,我才想在数据数组中添加名称。当我尝试打印这些名称时,我确实得到了重复。有没有办法解决这个问题?

-(NSMutableArray *)autoComplete
{
    NSMutableArray *dataArray = [[NSMutableArray alloc] init];

    NSString *url = [NSString stringWithFormat:@"%@45.25,-95.25&limit=100&client_id=Von0J4Bu6INiez5bGby2R&client_secret=50sUjSbg7dba8cQgtpdfr5Ns7wyYTqtmKpUU3khQ",kWSURL];
    NSDictionary * returnDict = (NSDictionary *) [self callWebService:url];
    if([returnDict objectForKey:@"success"])
    {
       NSArray *responceArray = [returnDict objectForKey:@"response"];
        for (NSDictionary *dict in responceArray) {

             placeDC *place = [[placeDC alloc]init];
            NSDictionary *placeDict = (NSDictionary *)[dict objectForKey:@"place" ];
            NSDictionary *loctionDict =(NSDictionary *)[dict objectForKey:@"loc"];
            NSString * name =[placeDict objectForKey:@"name"];
            NSString * stateFull =[placeDict objectForKey:@"stateFull"];
            NSString * countryFull =[placeDict objectForKey:@"countryFull"];

            NSString *latitude =[loctionDict objectForKey:@"lat"];
            NSString *longitude = [loctionDict objectForKey:@"long"];
            place.placeNmae=name;
            place.countryFullName=countryFull;
            place.stateFullName=stateFull;
            NSLog(@"%@ ",stateFull);

            place.latitude=[latitude doubleValue];
            place.longitude=[longitude doubleValue];


             [dataArray addObject:place];

        }


    }

    return dataArray;
}
4

5 回答 5

1

您可以将名称添加NSString到 anNSSet并检查每个循环是否包含它。

在您的内部,您if可以编写如下内容:

NSArray *responceArray = [returnDict objectForKey:@"response"];
NSSet *names = [[NSSet alloc] init];
for (NSDictionary *dict in responceArray) {
     NSDictionary *placeDict = (NSDictionary *)[dict objectForKey:@"place" ];
     NSString * name =[placeDict objectForKey:@"name"];
     if (![names containsObject:name]) {
          [names addObject:name];
          placeDC *place = [[placeDC alloc]init];
          NSDictionary *loctionDict =(NSDictionary *)[dict objectForKey:@"loc"];
          NSString * stateFull =[placeDict objectForKey:@"stateFull"];
          NSString * countryFull =[placeDict objectForKey:@"countryFull"];

          NSString *latitude =[loctionDict objectForKey:@"lat"];
          NSString *longitude = [loctionDict objectForKey:@"long"];
          place.placeNmae=name;
          place.countryFullName=countryFull;
          place.stateFullName=stateFull;
          NSLog(@"%@ ",stateFull);

          place.latitude=[latitude doubleValue];
          place.longitude=[longitude doubleValue];
          [dataArray addObject:place];
     }
}

希望这可以帮助!

于 2012-12-22T08:19:42.747 回答
1

首先检查服务器端是否有任何响应,检查响应使用 NSLog() 或断点。

如果响应正常,则进行以下检查,检查您的代码

if (![dataArray containsObject:@"Some Name"])
{

    // add Object

}
于 2012-12-22T09:34:26.527 回答
1

做一件事,将你dict的添加到另一个数组中并在这个数组中搜索数据是否已经存在,

[tempAry addObject: dict]; 

在插入之前

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", name];
    NSArray *filteredArray = [tempAry filteredArrayUsingPredicate:predicate];
    if ([filteredArray count] == 0)
    {
        [dataArray addObject:place];
    }
    else{
        //Already exist
    }
于 2012-12-22T10:49:06.477 回答
0

为什么不创建一个单独的字典,作为类的 ivar 或属性,用于存储我们所需的值,例如:

NSMutableDictionary *uniqueValueDict=[NSMutableDictionary new];

并继续将您所需的值和密钥存储为:

[uniqueValueDict setObject:stateFull forKey:uniqueValueDict];

你的工作会完成的。

于 2012-12-22T09:04:22.177 回答
0

这是我应用的最简单的解决方案,这应该让您从数组中提取独特的元素。

 NSArray * claimedOfferArray = [[NSArray alloc]initWithObjects:@"A",@"B",@"A",@"C",@"B" nil];
  NSArray * distinctArray = [[NSArray alloc]init]; 
  distinctArray =[[NSSet setWithArray:claimedOfferArray] allObjects];

此代码也适用于NSMutableArray 让我知道它是否适合您..:)。

于 2012-12-22T10:06:08.990 回答