2012-12-22 55 views
-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; 
} 
+0

响应为空 – Rajneesh071

+0

为什么你接受了我的以前回答? – Rajneesh071

回答

1

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

如果响应是OK,然后把下面的检查你的代码

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

    // add Object 

} 
+0

检查链接和回复我http://api.aerisapi.com/places/closest?p=45.25,-95.25&limit=100&client_id=Von0J4Bu6INiez5bGby2R&client_secret=50sUjSbg7dba8cQgtpdfr5Ns7wyYTqtmKpUU3khQ –

1

您可以在名称NSString添加到NSSet,并在每个周期检查它是否包含与否。

里面你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]; 
    } 
} 

希望这有助于!

+0

无法正常工作sir –

0

你为什么不创建一个单独的字典,因为伊娃或者类的属性,用于存储我们需要的值,说它为:

NSMutableDictionary *uniqueValueDict=[NSMutableDictionary new]; 

并保持存储您所需要的价值和键:

[uniqueValueDict setObject:stateFull forKey:uniqueValueDict]; 

您的工作将完成。

+0

他@Anoop Vaidya我想删除重复的状态名称plz检查链接 –

+0

http://api.aerisapi.com/places/closest?p=45.25,-95.25&limit=100&client_id=Von0J4Bu6INiez5bGby2R&client_secret= 50sUjSbg7dba8cQgtpdfr5Ns7wyYTqtmKpUU3khQ –

+0

链接didnt开放 –

0

这是我已经应用了简单的解决方案,这应该让你在捡了独特的元素进行排列的打算。

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

此代码也将与NSMutableArray 工作让我知道它是否适合你.. :)。

+1

没有@Dalee戴维斯它不工作 –

+0

嗯,这代码可以帮助你在提取独特的元素..在这种情况下..如果你把一个NSLog的独特数组,你应该只有A,B,C作为它的元素在你的日志中......那么究竟是不是你的工作? –

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 
    }