0

这让我发疯,我已经尝试了大约一个星期。希望某种鞋底可以提供帮助。我正在尝试创建一个新的模式弹出颜色选择器。但是,StopModal()不断创建一个新窗口。

我以NSWindow编程方式创建了一个新的有点像这样:

class ColorPicker:NSWindow{

    void ColorPicker(IntPtr Value):base(Value){
    }

    void ColorPicker(Color StartColor){
      //Set up window here.
    }

    public void ShowModal(NSWindow NewParent){
        this.ParentWindow = NewParent;
        NSApplication.SharedApplication.RunModalForWindow(this);    
        return DialogResult;
    }
}

我这样创建:

ColorPicker CP=new ColorPicker(Color.Red);

然后展示它

CP.ShowDialog(MyMainWindow);

我在表单上有一个按钮可以关闭它并调用

NSApplication.SharedApplication.StopModal();

但由于某种原因,这会通过调用创建第二个窗口:

void ColorPicker(IntPtr Value):base(Value){
}

然后我得到泄漏错误,很快它就崩溃了:

NativeRelease ERROR]: type: ColorPicker handle: 137041376 count: 2 gchandle: 0

objc[350]: Object 0x103070 of class NSConcreteMapTable autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
4

1 回答 1

1

如果您没有在 .NET 中保留对 ColorPicker 对象的引用,则可能会发生这种情况。它将被垃圾收集,然后在 Cocoa/objective-c 系统尝试向它发送消息时重新创建。

当我在关闭后处理对象时发生在我身上。

于 2012-07-20T00:04:42.623 回答