-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名前をに追加し、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];
     }
}

お役に立てれば!

于 2012-12-22T08:19:42.747 に答える
1

最初に、サーバー側からの応答があるかどうかを確認します。応答を確認するには、NSLog() またはブレーク ポイントを使用します。

応答がOKの場合は、次のコードをチェックしてください

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

    // add Object

}
于 2012-12-22T09:34:26.527 に答える
1

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 Let me know if it works for you..:) でも動作します。

于 2012-12-22T10:06:08.990 に答える