0

启用僵尸对象后,当我尝试编辑 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

4 回答 4

2

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

于 2013-01-28T15:25:37.003 回答
1

我认为这里真正的答案是您正在处理已设置为处理 NSAttributedString 而不是 NSString 的 UITextField。您会注意到,如果您正在处理 .xib 中定义的 UITextField,它的顶级属性选项现在是“文本”,选项为普通或属性。

如果您的文本字段切换到属性,如果您继续处理文本字段,就好像它是普通的一样,您会发现此错误发生。

于 2013-01-29T18:34:42.420 回答
1

我的文本字段在一个 xib 文件中,它的委托被连接到文件所有者。这导致我崩溃,因为文件的所有者是 NSObject。

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

于 2013-11-15T11:38:02.787 回答
0

使用工具,以便查看保留/释放:

如果您需要查看对象使用工具的保留、释放和自动释放发生的位置:

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

于 2013-01-13T14:10:03.753 回答