2010-04-21 91 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的事件處理程序更改了狀態事件。