2012-02-28 57 views
3

我写了一个简单的ios5应用程序(包括垃圾收集器),有一个单一视图和UITextField 我需要分析这个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:”被删除时,它有时会崩溃。 请帮助我。如何解决这个问题呢?

+0

当在输入文本的起始处(或结尾处)删除“abc:”的2-3次时,通常会崩溃。而我们在'UITextField'键入文本的中间键入“abc:” – Oleg 2012-02-28 08:56:31

+1

您是否使用Instruments检查过NSZombie? – Kheldar 2012-02-28 08:56:36

+0

我需要帮助:) – Oleg 2012-02-28 09:00:21

回答

4

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

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

如果我使用这种委托方法,我希望_my_问题将被解决**但是**奇怪的是,我不能使用'UITextField'的发送操作来完成这个非常简单的任务 – Oleg 2012-02-28 09:06:42

+1

如果文本在编辑“UITextField”的“编辑已修改”发送操作时编辑应用程序将变得不稳定。它是一个错误或类似的东西? – Oleg 2012-02-28 09:08:51

+0

我认为可以使用,如果你需要我会发送你一个示例代码 – 2012-02-28 09:17:45

1

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

+0

不,我的代码甚至不会编译,如果我在ARC模式下使用保留,发布等 – Oleg 2012-02-28 10:05:27

+0

你有这样的:@property(nonatomic,retain)IBOutlet UITextField * myTextField将; – 2012-02-28 10:05:58