我有这样的界面:
@interface MacCalculatorAppDelegate:NSObject
<UIApplicationDelegate> {
// ...
UIButton *operatorPressed;
NSString *waitingOperation;
}
我正在我的实现中初始化waitingOperation
变量,如下所示:
- (id)init {
if (self = [super init]) {
waitingOperation = @"not set";
}
return self;
}
我想在函数中重新初始化这个变量。这是计算器程序,当用户点击操作符按钮时,将调用以下函数:
- (IBAction)operatorPressed:(UIButton *)sender {
if([@"+" isEqual:operand]) {
waitingOperation = @"+";
}
}
但在检查if
语句后,我的程序将不会执行任何操作,当我尝试重新初始化waitingOperation
变量时会发生这种情况。
我是objective-c
的新手,请帮助我了解这里的错误。
提前谢谢。
答案 0 :(得分:0)
这里有几点需要注意。
waitingOperation=@"not set";
目前,这最终会导致程序崩溃。 Objective C字符串文字是NSString
的自动释放实例,这意味着除非您将其分配给保留属性或手动保留它,否则内存将被释放,留下一个悬空指针。
-(IBAction) operatorPressed:(UIButton *)sender {
您是否确认此方法实际被调用?您必须在Interface Builder中分配IBAction
。在调试器中逐步执行它,或使用NSLog
验证是否正在调用此方法。
if([@"+" isEqual:operand])
operand
来自哪里?
waitingOperation=@"+";
与上面相同的问题,这将在幕后释放,让你留下一个悬垂的指针。
另请注意,如果您知道这两个变量都是NSString
s,则使用isEqualToString:
比使用isEqual:
更快。
最后,这些内容不应该是您的app委托的一部分。这是视图控制器逻辑。
答案 1 :(得分:0)
如果您的操作数也是字符串,请检查isEqualToString
而不是isEqual