2010-04-21 101 views
0

我在玩我的应用程序,并且我非常快速地切换UISwitch(谁能抗拒?)。所以,我把它切换得非常快10-15次,这个数组应该包含来自表格视图单元格的数据,我有我的开关,要么有相同单元格的多余副本,要么只有一个副本(正确的大小写),或者根本没有数据。该应用程序工作正常,如果它以正常速度切换。UISwitch快速切换多次

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

感谢, Teja公司

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

-(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]; 
} 
} 
+0

如果没有看到代码就无法判断......交换机做了什么? – prendio2 2010-04-21 19:22:53

回答

0

如果我猜,你是如此之快,他们可能合并或取得跳过,所以如果你基于事件处理程序被调用的次数正在暗中设置状态下,你可能会trigging事件不同步。 (相反,您应该明确确定事件处理函数内部的UISwitch的状态 - 开或关)。您必须显示更多的代码才能确定。至少代码为UISwitch的事件处理程序更改了状态事件。