-1

私は UITableView をプログラムでセットアップしており、状態のすべての名前が入力されています。たとえば、セルの1つをクリックすると。ALABAMA、UIAlertView が表示されます。タイトルは、クリックしたばかりの州 (ALABAMA) のタイトルであり、別の NSMutable 配列にあるその州に関連する番号です。すべての州には、それに関連付ける異なる番号があります。

この数値は、実際には UIAlert のプレースホルダー テキストです。アラートの目的は、テキスト フィールドに数値を入力できるようにすることです。変更ボタンを押すと、プレースホルダー テキストにあった数値が (配列から) ) ユーザーが割り当てた番号で変更されます。永久に。変更をヒットするまではすべて問題ありませんが、SIGABRT エラーが発生し、出力には次のように表示されます。

2013-02-21 20:57:33.750 final[10046:11303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM replaceObjectAtIndex:withObject:]: object cannot be nil'

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


UIAlertView *alertView = [[UIAlertView alloc]
                        initWithTitle:[NSString stringWithFormat:@"%@", [states objectAtIndex:indexPath.row]]
                        message:[NSString stringWithFormat:@"%@", [tax objectAtIndex:53]]
                        delegate:self       
                        cancelButtonTitle:@"Cancel"           
                        otherButtonTitles:@"Change", nil];

    UITextField *myTextField =[[UITextField alloc] initWithFrame:CGRectMake(42, 50, 200, 25)];
    CGAffineTransform myTransform =CGAffineTransformMakeTranslation(0, 0);
    [alertView setTransform:myTransform];
    [myTextField setBackgroundColor:[UIColor clearColor]];
    [alertView addSubview:myTextField];
    myTextField.placeholder = [NSString stringWithFormat:@"%@", [tax objectAtIndex:indexPath.row]];
    myTextField.borderStyle = UITextBorderStyleNone;
    myTextField.returnKeyType = UIReturnKeyDone;
    myTextField.textColor = [UIColor grayColor];
    myTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
    myTextField.textAlignment = UITextAlignmentCenter;
    myTextField.delegate = self;


    [alertView show];
    [alertView release];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (buttonIndex == 1) {

        NSString *theTaxer = [myTextField text];
        [tax replaceObjectAtIndex:1 withObject:theTaxer];
    }
}
4

3 に答える 3

0

これを試して、

- (void)tableView:(UITableView *)tableView 
          didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


UIAlertView *alertView = [[UIAlertView alloc]
                    initWithTitle:[NSString stringWithFormat:@"%@", [states objectAtIndex:indexPath.row]]
                    message:[NSString stringWithFormat:@"%@", [tax objectAtIndex:53]]
                    delegate:self       
                    cancelButtonTitle:@"Cancel"           
                    otherButtonTitles:@"Change", nil];
alertView.tag =indexPath.row;

UITextField *myTextField =[[UITextField alloc] initWithFrame:CGRectMake(42, 50, 200, 25)];
[myTextField setTag:99];
CGAffineTransform myTransform =CGAffineTransformMakeTranslation(0, 0);
[alertView setTransform:myTransform];
[myTextField setBackgroundColor:[UIColor clearColor]];
[alertView addSubview:myTextField];
myTextField.placeholder = [NSString stringWithFormat:@"%@", [tax objectAtIndex:indexPath.row]];
myTextField.borderStyle = UITextBorderStyleNone;
myTextField.returnKeyType = UIReturnKeyDone;
myTextField.textColor = [UIColor grayColor];
myTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
myTextField.textAlignment = UITextAlignmentCenter;
myTextField.delegate = self;


[alertView show];
[alertView release];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

if (buttonIndex == 1) {
  UITextField * myTextField = (UITextField *)[alertView viewWithTag:99];
    NSString *theTaxer = [myTextField text];
    [tax replaceObjectAtIndex:1 withObject:theTaxer];
}
}
于 2013-02-22T05:03:41.830 に答える
0

alertView:clickedBUttonAtIndex が呼び出された時点で、クラス ivar として定義されていないmyTextFieldため、定義されていません。作成した関数でのみ参照できます。クラスの他の場所myTextFieldを参照したい場合(myTextFieldインスタンス) をクラス iVar にします。

于 2013-02-22T04:19:07.820 に答える
0

シザムの言うとおりです。テキストビューの参照を取得したい場合は、次のようにアラートビューを作成するときにテキストビューにタグを付けてください: myTextField.tag = 111; 次に、alertView デリゲート メソッドで:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

if (buttonIndex == 1) {

    UITextField *textField = [alertView viewWithTag:111];
    NSString *theTaxer = [textField text];
    [tax replaceObjectAtIndex:1 withObject:theTaxer];
}
}
于 2013-02-22T04:32:25.583 に答える