3

UITextField 単一のビューを持ち、入力テキストを分析する必要がある単純な ios5 アプリケーション (ガベージ コレクターを含む) を作成しました。これUITextField が私のコードです。ヘッダファイル:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITextFieldDelegate>
{
    IBOutlet UITextField *myTextField;
}

@property (nonatomic, retain) IBOutlet UITextField *myTextField;

-(IBAction)editingChanged:(UITextField *)sender;

editingChanged:変更された送信イベント編集で追跡されるため、ユーザーが私の何かを変更するたびにこのメソッドが呼び出されますUITextField

実装ファイルの一部:

#pragma mark - textField

-(NSString *)stringWithoutAbc:(NSString *)sourceString
{

    NSString *resultString=[sourceString stringByReplacingOccurrencesOfString:@"abc:" withString:@""];
    if (![resultString isEqualToString:sourceString])
    {
        NSLog(@"    sourceString: %@", sourceString);
        NSLog(@"    resultString: %@", resultString);
    };
    return resultString;
}

-(IBAction)editingChanged:(UITextField *)sender
{
    NSLog(@"editing Changed. text: %@", sender.text);

    //removing "abc:" from string in text field
    NSString *str=[self stringWithoutAbc:sender.text];

    //if something was removed - changing text in text field
    if (![str isEqualToString:sender.text])
    {
        sender.text=str;
    };
}

ユーザーがテキストを変更するたびに、UITextField標準的な方法を使用して、このテキストから「abc:」文字列を削除しますNSString

問題は、アプリケーションが不安定であることです。「abc:」が削除されるとクラッシュすることがあります。お願い助けて。この問題を解決するには?

4

2 に答える 2

4

以下textFieldのデリゲートメソッドを使用できます:-

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
于 2012-02-28T09:02:21.617 に答える
1

Arc を使用している場合は、オブジェクトを保持する必要はありません。ところで、ARC はガベージ コレクターではありません。 http://longweekendmobile.com/2011/09/07/objc-automatic-reference-counting-in-xcode-explained/ おそらく、textField で保持を使用しているためです。

于 2012-02-28T09:35:49.720 に答える