我尝试使用类创建一个简单的复数计算器。我的应用程序编译成功,但是当我运行它时,出现了一个空白窗口而不是一个带有我所有按钮,标签等的窗口。我在输出窗口中收到了此消息:
2016-03-08 22:20:42.499复数[30404:2328250]无法设定 (contentViewController)用户定义的检查属性(NSWindow): 无法从对象< _NSControllerObjectProxy创建BOOL: 0x6000000022c0> _NSControllerObjectProxy类
这是我的ViewController类代码。它涉及一个complexNumber类,我没有在这里提交:
class ViewController: NSViewController {
@IBOutlet var Screen: NSView!
var a = complexNumber();
@IBOutlet var realValue: NSTextField!
@IBOutlet var imaginaryValue: NSTextField!
@IBOutlet var resultLabel: NSTextField!
@IBAction func lengthResult(sender: AnyObject) {
let r = NSString(string: realValue.stringValue).doubleValue;
let i = NSString(string: imaginaryValue.stringValue).doubleValue;
a = complexNumber(real: r, imaginary: i);
resultLabel.stringValue = String(a.trigonometric());
}
@IBAction func trigonometryResult(sender: AnyObject) {
let r = NSString(string: realValue.stringValue).doubleValue;
let i = NSString(string: imaginaryValue.stringValue).doubleValue;
a = complexNumber(real: r, imaginary: i);
resultLabel.stringValue = String(a.length());
}
@IBAction func operation(sender: AnyObject) {
a = complexNumber(real: NSString(string: realValue.stringValue).doubleValue, imaginary: NSString(string: imaginaryValue.stringValue).doubleValue);
realValue.stringValue = ""
imaginaryValue.stringValue = "";
let b = complexNumber(real: NSString(string: realValue.stringValue).doubleValue, imaginary: NSString(string: imaginaryValue.stringValue).doubleValue)
switch sender.stringValue {
case "+": a = a.sum(b)
case "-": a = a.dif(b)
case "x": a = a.mul(b)
case ":": a = a.div(b)
default: a = a.sum(complexNumber())
}
}
@IBAction func displayResult(sender: AnyObject) {
resultLabel.stringValue = String("\(a.real) + i*\(a.imaginary)");
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}
我在这里找到了类似的帖子,但我认为这不是我想要的。
请帮帮我吗?
答案 0 :(得分:2)
对我而言,我猜是时间问题。一切都是在我几天前添加SFAuthorizationView之后开始的,我发现由于一个错误报告,也很清楚这种情况发生在像Sierra这样的旧操作系统上,但它很好,相反,在10.13+。 将一些代码从viewDidLoad()移动到viewDidAppear()问题就消失了。 基本上我只是等待调用有问题视图的任何相关方法,稍后将viewcontroller内容视图声明为已加载。显然,在新操作系统中修复了一个Apple问题。因此,在实例化nib / xib / storyboard后,我认为任何人都会遇到这样的问题,应首先显示视图然后自定义它。只是我的见证。
答案 1 :(得分:1)
我遇到了这个问题并想出来了。
在我看来,我有一个用户定义的属性(如果你查看视图的顶部,你有视图控制器和第一响应者,你应该看到它旁边的图标)。
只需删除它并运行您的应用程序。
希望这有帮助!
答案 2 :(得分:0)
我已经创建了一个带有“故事板”的应用程序,即如果有一个包含您的视图和窗口的故事板文件,那么缺少两件事之一:
1)如果主窗口和应该是主视图的视图,则右键单击 - 从窗口控制器拖动到应该是主视图的视图。当弹出窗口发生时,单击“内容视图” “即如下:
如果失败了,那么我将挖出计划二:)
这有多大帮助!!
阿德。
答案 3 :(得分:0)
有一件事可能对其他人有所帮助,我看到同样的消息,看起来像是contentViewController就是问题,但事实证明这是我写的东西中的另一个组件失败了。似乎窗口管理器捕获所有异常,而不仅仅是窗口异常,并打印这个欺骗性消息。对我有用的是逐步找到组件没有加载。
答案 4 :(得分:0)
当ViewDidLoad中存在错误或异常时,会发生这种情况。 确保已清除错误,并且您的用户界面将正常加载,并且您不会收到此消息。
答案 5 :(得分:0)
另一个原因-设置错误的绑定时。 我的错误示例:
Failed to set (contentViewController) user defined inspected property on (NSWindow): [<NSProgressIndicator 0x10111b890> valueForUndefinedKey:]: this class is not key value coding-compliant for the key Enabled.
要解决此问题,您需要在此处删除绑定: Effective Java