所以我正在开发一个简单的计算器程序来习惯可可和目标 C。我已经多次重做整个事情,每次我完成编码时,我第一次构建它,它工作正常,但每次之后窗口不会启动,它给了我这些错误:
2013-01-11 10:32:14.760 Visual Caluclator Fix[39892:403] *** Assertion failure in -[NSTextFieldCell _objectValue:forString:errorDescription:], /SourceCache/AppKit/AppKit-1138.47/AppKit.subproj/NSCell.m:1564
2013-01-11 10:32:14.762 Visual Caluclator Fix[39892:403] Ignoring exception raised in __-[NSPersistentUIManager restoreAllPersistentStateWithTalagentWindows:registeringAsReadyWhenDone:completionHandler:]_block_invoke_3: Invalid parameter not satisfying: aString != nil
我得出的结论是问题出在我的 textEdited 方法上,因为当我将其中的代码注释掉时,程序运行没有问题;但是,我不知道为什么会这样,或者为什么它会第一次运行而不是任何后续时间。当我放入异常断点时,它会将我指向 updateUI 方法中的一行以及 textEdited 方法中对 [self updateUI] 的调用。下面的代码是 textEdited 方法和它引用的其他方法。(我很确定 solve 方法没有任何问题,因为我在命令提示符计算器中使用它并且效果很好。另外,我知道这是一个非常复杂的用字符串和所有东西编写计算器的方法,但我只是试图将我已经拥有的命令提示程序代码集成到可可程序中。)
在 AppDelegate 类中:
- (void)updateUI{
[self.calculationView setStringValue: self.calculation.calcString];//Exception breakpoint points here
}
- (IBAction)textEdited:(id)sender {
self.calculation.calcString = self.calculationView.stringValue;
[self.calculation solve];
[self updateUI];//Exception breakpoint points here
}
在计算类中:
- (NSString*)solve{
for (int i = 0; i < [self.calcString length]; i++) {
NSRange nextChar = NSMakeRange(i, 1);
if ([[self.calcString substringWithRange: nextChar] isEqualToString: @"*"]||
[[self.calcString substringWithRange: nextChar] isEqualToString: @"/"])
[self calcTerm: i];
}
for (int i = 0; i < [self.calcString length]; i++) {
NSRange nextChar = NSMakeRange(i, 1);
if ([[self.calcString substringWithRange: nextChar] isEqualToString: @"+"]||
[[self.calcString substringWithRange: nextChar] isEqualToString: @"-"])
[self calcTerm: i];
}
return self.calcString;
}