附加字符串时,iPhone模拟器应用程序崩溃

时间:2010-05-03 22:22:27

标签: objective-c crash nsstring

我是一个完整的新手,所以我可能会错过一些非常简单的东西,但我无法让我的字符串附加工作。我将第3个字符添加到typedDigit&它崩溃了 - 这个方法被称为精细,typedDigit将长达2个字符。我认为在头文件中正确声明了所有内容。代码是 -

-(IBAction)digitPressed:(UIButton *)sender {

    NSString *digit = [[sender titleLabel] text]; // in this case, "0" - "9"

    if (userIsInMiddleOfTyping) {   // typedDigit is already at least 1 character long
        typedDigit = [typedDigit stringByAppendingString:digit];
    } else {                        // first character of typedDigit
        typedDigit = digit;
        userIsInMiddleOfTyping = YES;
    }

}

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

如果没有崩溃的堆栈跟踪,很难知道原因,但我的猜测是typedDigit在下次调用digitPressed函数之前正在自动释放。 stringByAppendingString:会返回一个自动释放的对象,因此如果您希望它通过下一个自动释放池刷新,则需要retain它。要直接修复,请尝试类似......

if (userIsInMiddleOfTyping) {
  typedDigit = [[[typedDigit autorelease] stringByAppendingString:digit] retain];
} else {  
  typedDigit = [digit retain];
  ...

除此之外,您需要确保在键入结束后的某个时刻release键入了数字,并且您已完成它。

答案 1 :(得分:0)

尝试附加数字时,您需要确保数字不是NULL。此外,没有提到typedDigit的初始化,所以如果它是一个垃圾指针或者初始化不当,当你试图操作它时会崩溃。

答案 2 :(得分:0)

我认为你可能有所有权问题。如果typeDigit是对象实例变量,则应使用setter方法进行设置。在任何情况下,你永远不会在你想要保留的字符串上调用“retain”,因此它们可能在方法调用之间取消分配。