私はこの奇妙な問題に悩まされています.ipadを使用してシミュレーターとデバッグモードUIObjects
で正常に機能する関連値をクリアする方法がありますが、同じアプリをアーカイブしてダウンロードした後(アドホックリリース)、この方法は異なる動作を示します.デバッグモードメソッドのすべての条件でアラートを使用してトレースしましたが、異なる動作を示しています。
//方法
-(void)NAclicked:(UIViewController *)controller ofId:(id)sender
{
UIView *newCheck = (UIView * )sender;
int i=newCheck.tag;
NSLog(@"id %d",i);
bool fromGroup4 = [controller isKindOfClass:[G4S16_FunctionalStatusEvaluation class]];
if([newCheck isKindOfClass:[CheckBoxNE class]] || ([controller isKindOfClass:[G4S16_FunctionalStatusEvaluation class]] && [sender isKindOfClass:[CheckBoxNASN class]]))
{
bool condition = false;
if(fromGroup4)
{
CheckBoxNASN* cb = (CheckBoxNASN*)sender;
condition = ([cb.Value isEqualToString:@"NA"]);
}
else
{
CheckBoxNE* cb = (CheckBoxNE*)sender;
if([[cb Value] intValue]==1)
{
NSLog(@"%d",([[cb Value] intValue]==1));
condition = true;
}
}
if(condition)
{
NSManagedObject *question =[self getQuestionObjectFromQuestionElementId:((UIButton *)sender).tag];
int questionId = [[question valueForKey:@"id"]intValue];
NSArray *arrQuestionElements= [self getQuestionElementsFromQuestion:questionId];
for(int j=0;j<[arrQuestionElements count];j++)
{
QuestionElements *questionElements = [arrQuestionElements objectAtIndex:j];
NSLog(@"Question Element %@",questionElements.id);
if([questionElements.id intValue]==i)
continue;
UIView *new = (UIView * )[controller.view viewWithTag:[questionElements.id intValue]];
if([new isKindOfClass:[UIButton class]])
{
UIButton* btnDD = (UIButton*)new;
[btnDD setTitle:@"" forState:UIControlStateNormal];
btnDD.titleLabel.text=@"";
[self saveAnswer:btnDD.tag AnswerText:@""];
}
else if([new isKindOfClass:[DWOptionGroup class]])
{
DWOptionGroup* btnCB = (DWOptionGroup*)new;
[btnCB setValue:@""];
[self saveAnswer:btnCB.tag AnswerText:@""];
}
else if([new isKindOfClass : [CheckBox class]])
{
CheckBox* btnCB = (CheckBox*)new;
[btnCB setValue:0];
[self saveAnswer:btnCB.tag AnswerText:@""];
}
else if([new isKindOfClass : [UITextField class]])
{
UITextField * txtCB = (UITextField *)new;
txtCB.text=@"";
[self saveAnswer:txtCB.tag AnswerText:@""];
}
else
{
//testing
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Testing"
message:@"nothing to clear."
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"Ok",nil];
[alert show];
//
}
}
}
}
else
{
[self removeNA:controller ofId:sender];
}
}
条件と結果
デバッグモードで
4 つの質問要素がある場合 (つまり、arrQuestionElements.count=4)。
1)UIボタン
2)DWOptionGroup
3)チェックボックス
4)UITextField
各ループで、それぞれの if 条件に入ります。1回目のループ=if([new isKindOfClass:[UIButtonクラス]])
2番目のループ=else if([new isKindOfClass:[DWOptionGroupクラス]])
等々。
ただし、アラートを使用してトレースされた同じ条件のアドホック リリースでは。
1回目のループ=その他の部分
2 番目のループ = その他の部分
3番目のループ=その他の部分
および 4 番目の loop=else if([new isKindOfClass : [UITextField class]]) (ループの最後の部分で正常に動作します)
同様に、最後のオブジェクトが UIButton の場合
1回目のループ=その他の部分
2 番目のループ = その他の部分
3番目のループ=その他の部分
および 4 番目の loop=if([new isKindOfClass:[UIButton class]]) (ループの最後の部分で正常に動作します)
この問題に関する提案は大歓迎です。ありがとうございました。