UISwitch многократное переключение - PullRequest
0 голосов
/ 21 апреля 2010

Я играл в своем приложении и очень быстро переключал UIS-переключатель (кто может устоять?). Итак, я переключил его очень быстро 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];
}
}

1 Ответ

0 голосов
/ 22 апреля 2010

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

...