UITextField在编辑状态下更改文本会导致崩溃

3

我是一位有用的助手,可以为您进行文本翻译。

我编写了一个简单的ios5应用程序(包括垃圾收集器),其中包含一个单视图和一个UITextField。我需要分析这个UITextField中的输入文本。以下是我的代码。 头文件:

#import <UIKit/UIKit.h>

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

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

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

editingChanged: 通过发送事件“editing changed”进行跟踪,因此每当用户更改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中更改文本时,我们使用标准的NSString方法从该文本中删除“abc:”字符串。
问题是:应用程序不稳定。有时在删除“abc:”时会崩溃。 请帮我解决这个问题。

通常情况下,当我们在UITextField中输入的文本开头(或结尾)被删除2-3次时,会导致程序崩溃。而且,当我们在已经输入的文本中间输入"abc:"时,也会出现这种情况。 - Oleg
1
你用Instruments检查过NSZombie了吗? - Kheldar
垃圾回收器?在iOS中?你是指ARC吗? - sosborn
我正在启动分析 (instruments 应用程序) -> 内存 -> 僵尸。当然还有一些内存分配。我怎样才能看到是否有僵尸? - Oleg
1
有一个复选框需要勾选,然后运行软件直到它崩溃。仪器会告诉你是否检测到僵尸,并指导你找到责任代码行。 - Kheldar
我也这么认为。这个应用程序没有检测到僵尸。 - Oleg
2个回答

4
您可以使用下面的textField的代理方法:-
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

如果我使用这个委托方法,我希望能解决我的问题,但是很奇怪的是,我不能使用UITextField的发送操作来完成这个非常简单的任务。 - Oleg
1
如果在“editing changed”发送动作的UITextField中编辑文本,应用程序将不稳定。这是一个错误还是类似的问题? - Oleg

1

不,如果我在ARC模式下使用retain、release等语句,我的代码甚至无法编译。 - Oleg
你有这个:@property (nonatomic, retain) IBOutlet UITextField *myTextField; - Adrian Ancuta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接