如果在编辑中更改文本更改 UITextField 崩溃

Posted

技术标签:

【中文标题】如果在编辑中更改文本更改 UITextField 崩溃【英文标题】:UITextField crashes if changing text in editing changed 【发布时间】:2012-02-28 08:54:36 【问题描述】:

我编写了一个简单的 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: 跟踪发送事件编辑已更改,因此每次用户更改我的 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:”被删除时,它有时会崩溃。 请帮帮我。如何解决这个问题?

【问题讨论】:

通常在键入文本的开头(或结尾)删除 2-3 次 "abc:" 时崩溃。我们在UITextField的输入文本中间输入“abc:” 你检查过 NSZombie's with Instruments 吗? 垃圾收集器?在 iOS 中?你是说ARC吗? 我正在启动分析(仪器应用程序)-> 内存-> 僵尸。当然有一些内存分配。如何查看是否有僵尸? 有一个要勾选的复选框,然后你运行你的软件直到它崩溃。 Instruments 会告诉你它是否检测到僵尸并引导你到负责的线路。 【参考方案1】:

你可以使用下面textField的委托方法:-

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

【讨论】:

如果我使用这个委托方法我希望我的问题会得到解决但是奇怪的是我不能使用UITextField的发送这个非常简单的任务的操作 如果文本在UITextField 的“编辑更改”发送操作中被编辑,应用程序将不稳定。是bug还是类似的东西?【参考方案2】:

如果您使用 Arc,则不必保留对象。顺便说一句,ARC 不是垃圾收集器。 http://longweekendmobile.com/2011/09/07/objc-automatic-reference-counting-in-xcode-explained/ 可能是因为您在 textField 上使用了保留。

【讨论】:

不,如果我在 ARC 模式下使用保留、释放等,我的代码甚至无法编译 你有这个:@property (nonatomic, retain) IBOutlet UITextField *myTextField;

以上是关于如果在编辑中更改文本更改 UITextField 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义 UITableViewCell 时在编辑之前更改 UITextField 文本

UITextField 在编辑时更改字体

滚动 UITableView 时自定义单元格中的 UITextField 文本正在更改

编辑时如何更改 UITextField

UITextField 不会正确更改文本颜色

从 UILabel 或 UITextField 更改 UIButton 的标题