0

私は自分のアプリで遊んでいて、UISwitch を非常に速く切り替えていました (誰が抵抗できますか?)。だから、私はそれを10〜15回非常に速く切り替えました。スイッチを入れたテーブルビューセルからのデータを含む配列には、同じセルの余分なコピーまたは1つのコピー(正しい場合)またはその中にデータはまったくありません。通常の速度で切り替えると、アプリは正常に動作します。

このシナリオが私のユーザーに実際に起こることはないと確信していますが、なぜそれが起こっているのかについてはまだ興味があります.

ありがとう、テジャ

編集:コードを追加します。このメソッドは、スイッチが切り替えられるたびに呼び出されます。

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

1 に答える 1

0

私が推測しなければならないのは、イベントを非常に速くトリガーしているため、イベントが合体したりスキップされたりする可能性があるため、イベントハンドラーが呼び出された回数に基づいて暗黙的に状態を設定している場合、同期が取れなくなる可能性があることです。UISwitch(代わりに、イベント ハンドラー内でオンまたはオフの状態を明示的に判断する必要があります。) 確認するには、さらに多くのコードを表示する必要があります。少なくとも、UISwitch変更された状態イベントのイベント ハンドラーのコード。

于 2010-04-21T20:07:17.647 に答える