我是一个完整的新手,所以我可能会错过一些非常简单的东西,但我无法让我的字符串附加工作。我将第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;
}
}
非常感谢您的帮助!
答案 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”,因此它们可能在方法调用之间取消分配。