问题标签 [cocoa-sheet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - 管理在类方法中创建的实例的生命周期的更好方法
在我正在编写的一个宠物应用程序中,在主窗口上,我有几个自定义视图相互对齐,每个视图都有一个标签、一个组合框和一个按钮。
单击按钮调用在同一视图中找到组合框的代码,然后调用以下函数(的类方法RVListEditorController
):
该代码创建一个RVListEditorController
. 它控制一个面板,允许我编辑组合框中的列表(删除项目、排序项目等)。除了其他控件外,它还有两个关闭它的按钮,取消和确定。
两个按钮的代码是:
这是关闭工作表的仅有的两个按钮。我的问题是关于实例的生命周期管理。它在类方法中分配,但随后控制权再次交给 Cocoa,类方法结束。我能找到释放实例的唯一地方是关闭按钮的两个处理程序。我的问题是,beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:
它不会简单地打开工作表,然后等到它再次关闭,返回一个值它是如何关闭的。如果是这样的话,我可以在类方法中关闭实例,我会感觉更好。
我的问题:是否有更好的方法来处理实例的生命周期,或者 Cocoa 中是否有一些东西可以让我以模态方式打开工作表窗口,然后等待它再次关闭,这样我就可以在之后立即释放实例那?我想不出来,但毕竟我是一个相对新手。
FWIW,代码有效,所以没有错误。我对我在类方法中分配某些东西的构造不太满意,然后必须在其自身的两个实例方法中释放它。
macos - 如何在 Cocoa Desktop 上以这种方式显示视图?
我正在做一个应用程序,我想知道如何显示这样的视图:
objective-c - NSApp beginSheet 非常短暂地创建一个工作表然后消失
[NSApp beginSheet]
像这样使用:
在执行时,工作表会出现一瞬间,尽管它是浮动的并且不像通常的工作表那样附加到窗口,然后消失。 [NSApp mainWindow]
经验证不是nil
。不会产生异常。任何人都可以提出可能导致这种行为的原因吗?
我正在添加到现有项目中,并且一直在尝试模仿与此窗口一起使用的其他工作表控制器的结构和创建。
macos - beginSheet 方法对我不起作用
我有saveWindowController
(NSWindowController 子类对象)。我使用initWithWindowNibName:
方法来初始化控制器。
我将 xib 中文件的所有者设置为SaveWindowController
. 我delegate
(从窗口)连接到文件的所有者,window
(从控制器)连接到 xib 文件中的 NSWindow。
执行此方法后,我看到没有标题栏的模态窗口,它看起来不像普通工作表。它只出现在第一个窗口的左下角。
你能帮我吗,我做错了什么?
cocoa - 使用 ARC 在 Xcode 4 (OSX 10.7.2) 中将 Cocoa 窗口显示为工作表
我试图让一个登录窗口显示为我的 MainWindow 中的工作表,但是每当我尝试实现 AppKit 方法时,由于各种难以区分的原因,总是会弹出一个错误。
那里的在线指南都不起作用,当我将他们的代码/改编类应用到我自己的项目时,它们永远不会起作用。
大多数指南都严重过时,包括 Apple 文档。而且它们似乎都不与自动引用计数兼容。或者 Xcode 4 接口。
有人可以为我详细介绍完整的指南,以便在主窗口上按下按钮后显示工作表的最简单方法。
如果您需要,请随时询问更多信息。
objective-c - beginSheet:用 ARC 阻止替代方案?
Mike Ash 创建了一个使用块来处理来自工作表的回调的示例,这看起来非常好。这反过来又被更新以使用用户 Enchilada 在beginSheet 的另一个 SO 问题中进行垃圾收集:块替代?, 见下文。
在启用 GC 时,这不适用于自动引用计数 (ARC)。我自己是 ARC 和 blocks 的初学者,无法让它发挥作用。我应该如何修改代码以使其与 ARC 一起使用?
我知道 Block_release() 的东西需要删除,但是我无法克服关于将 'void *' 转换为 'void (^)(NSInteger)' 的编译错误,这在 ARC 中是不允许的。
objective-c - 工作表窗口中的 NSTimer 未触发
我在面板中有一个计时器,我试图每秒触发一次,但是我似乎无法触发它。我正在创建我的面板,如下所示:
然后在我的 targetController 我有以下内容:
我的理解是,我通过添加带有 的计时器来正确执行此操作NSModalPanelRunLoopMode
,但是即使这样做,我的 updateDisplay: 选择器也永远不会被触发。
有人对我在这里做错了什么有任何想法吗?
注意:我也尝试过NSDefaultRunLoopMode
,但没有任何区别。计时器仍未触发。
编辑:我的总体目标如下 -
我的面板有一个表格视图,可以一次添加许多项目(来自多个线程)。所以我将项目添加到一个临时数组中,然后当计时器触发时,它将临时数组中的项目添加到主数组并重新加载表。以下是执行此操作的代码示例:
计时器更新时触发的方法:
不幸的是,如果没有计时器触发,我在表中根本没有任何条目。
下面是我正在尝试执行的操作的屏幕截图(条目已直接添加到主数组中。)
objective-c - 自定义模态对话框和后台操作
我有一个带有自定义多步骤帐户设置的 Cocoa 应用程序,我将其实现为带有一组视图的自定义模式对话框。
问题是后台操作(获取 URL)似乎卡住了。我认为这是因为应用程序处于模式模式。
这里是启动模态对话框的代码:
首先,我的假设是否正确?即使应用程序正在运行模式,是否有办法让后台操作继续进行?
实际的后台操作不在我的控制之下。它是一个接受完成块的外部 API。
cocoa - 可可 beginSheet:didEndSelector 抛出错误
我正在将工作表加载到我的主 .xib 中,工作表是一个面板,显示或关闭工作表没有问题,但是当我关闭它时,我收到一条错误消息:
这是我的代码:
macos - 检查工作表是否打开
我正在编写一个 Cocoa 应用程序,基本上我有一个窗口,我需要在打开另一个窗口之前检查工作表是否打开。谷歌似乎不知道那个。如何检查工作表是否打开?