0

次のコードでは、ユーザーが選択した名前を に追加しようとしていますarrayDoctors。たとえばA,B、それをselectedDoctors配列に追加します。しかし、2回目に医師C,Dを選択して配列に追加するとselectedDoctors、以前のオブジェクトA,BCandに置き換えられDます。

- (void)doneDoctorSelection:(id)sender
{
   [pop3 dismissPopoverAnimated:YES];
   NSString *str = [arrayDoctors objectAtIndex:0];
   NSString *str1 = [str stringByAppendingString:[NSString stringWithFormat:@" + %d",arrayDoctors.count-1]];

   if([arrayDoctors count] == 1)
    lblDoctor.text = str;
   else
      lblDoctor.text = str1;

   [selectedDoctors addObject:arrayDoctors];
   [selectedDoctorIdList addObject:arrayDoctorsId];

   NSLog(@"selectedDoneDoctors %@ ",selectedDoctors);

}

私は何を間違っていますか?

4

2 に答える 2

0

あっ!! 最終的に解決策を見つけました。新しい値を入れる前にarrayDoctorsからオブジェクトを削除していて、viewDidLoadメソッドで初期化していました。[selectedDoctors addObject:arrayDoctors]; 2回目は、同じメモリ位置を使用するため、同じオブジェクトを1位に置き換えていました。解決策は、一時オブジェクトを作成することでした。以下は変更後のコードです。

- (void)doneDoctorSelection:(id)sender
{
   [pop3 dismissPopoverAnimated:YES];
   NSString *str = [arrayDoctors objectAtIndex:0];
   NSString *str1 = [str stringByAppendingString:[NSString stringWithFormat:@" + %d",arrayDoctors.count-1]];

   NSMutableArray *tempDoctor = [[NSMutableArray alloc]initWithArray:arrayDoctors];
   NSMutableArray *tempDocorId = [[NSMutableArray alloc]initWithArray:arrayDoctorsId
                               ];

   if([arrayDoctors count] == 1)
       lblDoctor.text = str;
   else
       lblDoctor.text = str1;

   NSLog(@"Before Adding %@ ",selectedDoctors);

   [selectedDoctors addObject:tempDoctor];
   [selectedDoctorIdList addObject:tempDocorId];

   //[selectedDoctors addObjectsFromArray:arrayDoctors];
   //[selectedDoctorIdList addObjectsFromArray:arrayDoctorsId];

   NSLog(@"selectedDoneDoctors %@ ",selectedDoctors);

}

私を正しい方向に向けてくれてありがとう。

于 2013-09-30T13:00:09.293 に答える