Iphone UISwitch快速切换多次

Iphone UISwitch快速切换多次,iphone,uiswitch,Iphone,Uiswitch,我正在玩我的应用程序,我正在快速切换UI开关(谁能抗拒?)。因此,我快速切换了10-15次,一个数组应该包含来自我所切换的表视图单元格的数据,或者有同一单元格的额外副本,或者只有一个副本(正确的情况),或者根本没有数据。如果以正常速度切换,应用程序工作正常 我很确定这种情况不会发生在我的用户身上,但我仍然很好奇为什么会发生这种情况 谢谢, 特加 编辑:添加代码。每次切换开关时都会调用此方法 -(void)saveOptionChanged:(id) sender { UISwitch *sw =

我正在玩我的应用程序,我正在快速切换UI开关(谁能抗拒?)。因此,我快速切换了10-15次,一个数组应该包含来自我所切换的表视图单元格的数据,或者有同一单元格的额外副本,或者只有一个副本(正确的情况),或者根本没有数据。如果以正常速度切换,应用程序工作正常

我很确定这种情况不会发生在我的用户身上,但我仍然很好奇为什么会发生这种情况

谢谢, 特加

编辑:添加代码。每次切换开关时都会调用此方法

-(void)saveOptionChanged:(id) sender
{
UISwitch *sw = (UISwitch *) sender;
//int tag = current.tag;
BOOL status = (BOOL) [sw isOn];
NSInteger tag = sw.tag;
NSInteger row1 = tag%1000;
NSInteger section1 = (tag - row1)/1000;
DiagDetails *temp = [preferences getDiagElementAt:section1 row:row1];
temp.ICD9Code= [temp.ICD9Code stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
temp.ICD9Desc= [temp.ICD9Desc stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"Adding %@ - %@",temp.ICD9Code, temp.ICD9Desc);
NSLog(@"tag = %ld, row = %ld, section = %ld",tag,row1,section1);
if(status) {
    BOOL returnVal = YES;
    returnVal = [currentPatient addICD9Code:temp];
    if(!returnVal) {
        UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Diagnosis add error" message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [error show];
        [error release];
        [sw setOn:NO];
    }
}
else {
    DiagDetails *temp = [preferences getDiagElementAt:section1 row:row1];
    [currentPatient removeICD9Code:temp.ICD9Code];
}
}

如果我不得不猜测,您触发事件的速度太快,以至于它们可能合并或被跳过,因此如果您根据调用事件处理程序的次数隐式设置状态,则可能会失去同步。(相反,您应该在事件处理程序中显式地确定
ui开关的状态--on或off。)您必须显示更多代码才能确保。至少是
UISwitch
changed state事件的事件处理程序的代码。

如果看不到代码,就无法判断开关是做什么的?