UITextField - 发送到解除分配的实例“UIKBStringWideAttributeValueForKey:”的消息

时间:2013-01-13 13:38:08

标签: xcode ios6 uitextfield

启用Zombie Objects后,当我尝试编辑UITextField(textLvl)时,我能够看到以下错误:

2013-01-13 13:27:10.509 testob[18418:907] *** -[NSConcreteMutableAttributedString
 _UIKBStringWideAttributeValueForKey:]: message sent to deallocated instance 0x2066a1f0

我已经发布了导致下面问题的代码部分,它似乎特别是“textField.text = self.storeText;”部分 - 当我发表评论时,问题就会消失。

你或许可以告诉我,我不是最有经验的iOS开发者,为什么我的UITextView会在我设置文本后解除分配?请帮忙!

另外,我之前从未听说过“_UIKBStringWideAttributeValueForKey” - 有什么想法吗?

全部谢谢!

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@"Text began editing");
 self.storeText = textField.text;
  textField.text = @"";

}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    if (textField == textLvl){

        if ([textField.text isEqualToString:@""]){
            textField.text = self.storeText;
            NSLog(@"No Text");
        }

        self.conv = [textField.text intValue];
        if (self.conv >= 101){
            textField.text = @"100";
            UIAlertView *successAlert = [[UIAlertView alloc] initWithTitle:@"Oh no!" message:@"Can't be higher than 100." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [successAlert show]; }
        }}

4 个答案:

答案 0 :(得分:2)

这可能是框架内部的错误。我建议您添加 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField并将文本字段文本设置为nil,然后重置文本字段文本。

答案 1 :(得分:1)

我认为这里真正的答案是你正在处理一个UITextField,它被设置为处理NSAttributedString而不是NSString。您会注意到,如果您正在处理.xib中定义的UITextField,那么它的top属性选项现在是“Text”,其中包含Plain或Attributed选项。

如果您的文本字段已切换为属性,那么如果您继续处理文本字段,就会发现此错误,就好像它是Plain一样。

答案 2 :(得分:1)

我的文本域位于xib文件中,并且它的委托已连接到文件所有者。这导致了我的崩溃,因为该文件的所有者是NSObject。

我实际上想将代理连接到单元格,而不是文件所有者。

答案 3 :(得分:0)

使用乐器,请参阅retains / releases:

如果您需要查看对象使用仪器的保留,释放和自动释放的位置:

在仪器中运行,在分配中设置“记录参考计数”(您必须停止记录以设置选项)。导致选择器运行,停止记录,搜索那里的ivar(datePickerView),向下钻取,你将能够看到所有保留,释放和自动释放发生的位置。