0

ここで見つけたスクリプトを使用して、テキストフィールドの下にオートコンプリート機能を実装しようとしています:

http://www.raywenderlich.com/336/how-to-auto-complete-with-custom-values

しかし、スクリプトは正常に実行され、アプリは応答せずにクラッシュします (TUAppDelegate の exc_bad_access のみ)。

いいえ、他にもキーボードの方法がいくつかあるので、それらが競合するかどうかはわかりません。

テキストフィールドは次のように宣言されます。

mytextfield_textfield = [[UITextField alloc] initWithFrame:CGRectMake(60, 57, 145, 20)];
mytextfield_textfield.borderStyle = UITextBorderStyleNone;
mytextfield_textfield.font =  [UIFont fontWithName:@"NeoSans" size:14];
mytextfield_textfield.placeholder = @"Enter something";
mytextfield_textfield.text = @"";
mytextfield_textfield.secureTextEntry = NO;
mytextfield_textfield.autocapitalizationType = UITextAutocapitalizationTypeNone;
mytextfield_textfield.autocorrectionType = UITextAutocorrectionTypeNo;
mytextfield_textfield.keyboardType = UIKeyboardTypeDefault;
mytextfield_textfield.returnKeyType = UIReturnKeyDone;
mytextfield_textfield.clearButtonMode = UITextFieldViewModeWhileEditing;
mytextfield_textfield.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;    
mytextfield_textfield.delegate = self;
[self.view addSubview:mytextfield_textfield];

そして、その下のオートコンプリートビューは、テーブルビューではなくスクロールビューとして表示されます (別の理由)。しかし、現在は使用されていません。

それから私はすでにこれらの方法を持っています:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch * touch = [touches anyObject];
    if(touch.phase == UITouchPhaseBegan) {
        [mytextfield_textfield resignFirstResponder];
    }

    [mytextfield_textfield resignFirstResponder];
    myTableView.userInteractionEnabled = YES;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    myTableView.userInteractionEnabled = NO;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [mytextfield_textfield resignFirstResponder];
    myTableView.userInteractionEnabled = YES;
    [self performSelector:@selector(AddAction:) withObject:nil] ;
    return YES; 
}

そして今、私はオートコンプリートを実装しています:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    autocompleteView.hidden = NO;
    NSString *substring = [NSString stringWithString:textField.text];
    substring = [substring stringByReplacingCharactersInRange:range withString:string];
    [self searchAutocompleteEntriesWithSubstring:substring];
    myTableView.userInteractionEnabled = YES;
    NSLog(@"ok") ;
    return NO;
}

- (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring {
    NSDictionary *dictionary = [[NSDictionary alloc] init ];
    NSString *path = [[NSBundle mainBundle] bundlePath] ;
    NSString *dictionary_path = [path stringByAppendingPathComponent:@"categorieslist2.plist"] ;
    dictionary = [NSDictionary dictionaryWithContentsOfFile:dictionary_path] ;

    for(id key in dictionary) {
        NSLog(@"%@",key) ;
    }
    [dictionary release] ;
}

キーを出力し、NSlog から OK を返しますが、その後クラッシュします。理由はありますか?

なぜ機能しないのかを理解しようとしているので、NSLogのみを実行しています

4

2 に答える 2

1

変化する

   - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

return YES;
}
于 2012-10-09T05:10:13.190 に答える
0

理由はわかりませんが、[辞書のリリース] が原因でした。誰でも理由を説明できますか?同じことで、アプリの別のセクションでクラッシュが発生し、plist から読み取った辞書もリリースしました。forループの後に辞書を使用していなくても、コメントアウトするとすべてが解決しました

于 2012-10-09T21:52:18.770 に答える