Modal NSWindow从未发布过

时间:2016-04-27 17:55:51

标签: swift cocoa nswindow autorelease nswindowcontroller

[首先,请注意我没有使用Interface Builder]

当菜单项被点击时,我将NSWindow显示为模态表。这是显示它的代码:

let win = NSWindow(contentRect: NSRect(origin: NSZeroPoint, size: NSSize(width: 650, height: 400)), styleMask: NSResizableWindowMask, backing: .Nonretained, defer: false)
win.releasedWhenClosed = true
setupController = SetupSheetController(window: win)
mainWindow.beginSheet((setupController!.window)!) { (response: NSModalResponse) in
    print("didClose")
    self.setupController = nil
}

setupController被定义为实例变量var setupController: SetupSheetController?;并且SetupSheetControllerNSWindowController子类。

当用户完成此工作表时,self.window?.sheetParent?.endSheet(self.window!, returnCode: NSModalResponseXXX)会调用setupController

我的问题是模态NSWindow及其控制器都没有被释放。当我重新打开模态表时,它们也不会重复使用。 另请注意,我没有在此处显示的任何其他位置引用控制器。 想法?

1 个答案:

答案 0 :(得分:0)

好的......事实证明我必须import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * A simple {@link Fragment} subclass. */ public class noVIP extends Fragment { public noVIP() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_no_vi, container, false); } } 出窗口本身,尽管使用了一些间接:nil(要写在win.windowController?.window = nil的completionHandler中)。

但它对我来说并不是很优雅。还有其他办法吗?