2010-04-21 3 views
0

Я играл вокруг своего приложения, и я очень быстро переключал UISwitch (кто может сопротивляться?). Таким образом, я переключил его очень быстро в 10-15 раз, массив, который должен содержать данные из ячейки представления таблицы, в которые я имею свой переключатель, либо имеет дополнительные копии одной и той же ячейки, либо только одну копию (правильный случай) или никаких данных в нем вообще нет. Приложение прекрасно работает, если оно переключается с нормальной скоростью.UISwitch быстро переключался несколько раз

Я уверен, что этот сценарий на самом деле не случится с моими пользователями, но мне все еще интересно, почему это происходит.

Спасибо, Тея

Edit: Добавление кода. Этот метод вызывается каждый раз, когда переключатель переключается.

-(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

ответ

0

Если бы я должен был догадаться, что вы trigging события так быстро, что они могут сливаться или получить пропущено, так что если вы неявно установления состояния на основе количества раз, обработчик события вызывается, вы могли бы выйти из синхронизации. (Вместо этого вы должны явно указывать состояние UISwitch - вкл. Или выкл. Внутри обработчика событий.) Вам нужно будет показать больше кода, чтобы быть уверенным. По крайней мере, код для обработчика событий для события UISwitch изменил состояние.