2012-12-22 54 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 
    }