在开发和调试 macOS 应用程序时,有没有办法模拟系统范围内的“内存不足”事件或通知?
iOS 模拟器有这样的功能,但我似乎无法找出 macOS 下的等效项。
我感兴趣的是模拟内存不足的情况,看看班怎么样NSPurgeableData和IOSurface手柄被清除。
(除了编写一个不断分配内存的简单应用程序......)
尝试弄清楚如何在 iOS 和 macOS 上的 SwiftUI 中使用 QuickLook。我怀疑在不久的将来,将会有一些统一的 SwiftUI QL API,但是 \xe2\x80\x99 还看不到它,所以让 \xe2\x80\x99s 使用我们拥有的 \xe2\x80\xa6
\n\n如何从 SwiftUI 视图呈现和配置 QLPreviewPanel?到目前为止,我有这个:
\n\nstruct ItemView: View {\n let previewPanelThing = PreviewPanelThing()\n var body: some View {\n Button("OSX preview") {\n print("osx preview")\n if let previewPanel = QLPreviewPanel.shared() {\n self.previewPanelThing.updateControllerForPanel(previewPanel)\n previewPanel.makeKeyAndOrderFront(self.previewPanelThing)\n } \n }\n }\n}\n\nclass PreviewPanelThing: QLPreviewPanelDataSource {\n\n func updateControllerForPanel(_ panel: QLPreviewPanel) {\n print("updating controller")\n panel.updateController()\n }\n\n func numberOfPreviewItems(in panel: QLPreviewPanel!) -> Int {\n print("number of items")\n return 1\n }\n\n func previewPanel(_ panel: …Run Code Online (Sandbox Code Playgroud) 我已经启动了一个新的 macOS 项目(目前在 Big Sur beta 3 上),节点NSOutlineView似乎已损坏。分不清这是我还是操作系统。
这是一个演示该问题的示例项目。还有一个图像...
正如您所看到的,单元与扩展 V 形重叠。单击任一 V 形图标会将第一行恢复到正确的布局,但不会将第二行恢复到正确的布局。此外,自动保存方法persistentObjectForItem和itemForPersistentObject永远不会被调用。
测试项目非常简单——我所做的就是将SourceView组件从视图库添加到默认应用程序项目,并将委托/数据源连接到视图控制器。还检查Autosave Expanded Items了 IB 并在字段中输入了名称Autosave。这是完整的控制器代码:
class ViewController: NSViewController {
@IBOutlet var outlineView: NSOutlineView?
let data = [Node("First item", 1), Node("Second item", 2)]
}
extension ViewController: NSOutlineViewDataSource {
func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any {
data[index]
}
func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool {
true …Run Code Online (Sandbox Code Playgroud) 我有一个程序接受 NSWindow 的本机窗口句柄(已创建但尚未可见)。我这样做是为了更改一些本机窗口样式和行为。我可以做我需要做的一切,除了我无法让 mouseEnter/mouseExit 工作,因为它似乎需要在实例化之前进行子类化。有没有解决的办法?我真的不想连续轮询鼠标位置只是为了检测窗口一部分的 mouseEnter 和 mouseExit 。
注意:我必须这样做,因为我想在窗口未聚焦时检测悬停。
我可以附加跟踪区域,但如果不对其进行子类化,我不确定如何挂钩事件:
NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:CGRectMake(0, 0, 120, 300) options:NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways owner:window userInfo:nil];
[window.contentView addTrackingArea:area];
Run Code Online (Sandbox Code Playgroud)
PS:如果有帮助的话,我愿意使用 C 或 Swift。
我正在进行性能测试,尝试测量NSOutlineViewMac 应用程序中重要部分的渲染性能。在此过程中,我循环多次,创建视图,将其嵌入虚拟窗口中,并将其渲染为图像。我概括了一点,但大致是这样的:
// Intentionally de-indented these for easier reading in this narrow page
class MyPerformanceTest: XCTestCase { reading
func test() {
measure() {
// autoreleasepool {
let window: NSWindow = {
let w = NSWindow(
contentRect: NSRect.init(x: 100, y: 100, width: 800, height: 1200),
styleMask: [.titled, .resizable, .closable, .miniaturizable],
backing: .buffered,
defer: false
)
w.tabbingMode = .disallowed
w.cascadeTopLeft(from: NSPoint(x: 200, y: 200))
w.makeKeyAndOrderFront(nil)
w.contentView = testContentView // The thing I'm performance testing
return w
}()
let bitmap = …Run Code Online (Sandbox Code Playgroud) instruments nsoutlineview appkit automatic-ref-counting swift
如果我想在iPhone上忽略UIKit中的触摸事件,我会这样做:
// Begin ignoring events
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
//Do my code
// Stop ignoring events
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
Run Code Online (Sandbox Code Playgroud)
这允许我在"忽略"调用之间的代码操作,而不必担心用户交互改变应用程序的任何状态.
我的问题是,如果我正在编写Mac OS X应用程序(AppKit vs. UIKit),我该怎么做?我基本上想在一些操作期间"锁定"用户(具体地说,进行网络呼叫,并且快速改变状态会排队大量的网络呼叫,这些呼叫会很快阻碍彼此).
我需要使用AppKit手动管理吗?即设置进度条,并手动禁用所有UI元素?
我正在试图弄清楚如何创建"新的流行"组合窗口标题和工具栏,如Reeder for Mac和Mac App Store(http://www.apple.com/mac/app-store/)中所示.尝试谷歌搜索,但这似乎不是一个非常讨论的话题!
基本上; 它是一个无边界窗口,一直有自定义视图(在这种情况下,我如何获得工作交通灯按钮)?或者是否可以使用Interface Builder?
我正在写一个基础工具.我必须将线程分成不同的正在进行的任务.
我试图做线程,但它一直在崩溃.最后我想出了我需要运行自己的runloop的原因.
有人可以用一些简单的例子来帮助吗?我试过跟随代码,但它不起作用.我每次运行它都会遇到异常崩溃?如何在Foundation工具中运行线程?
@interface MyClass : NSObject
{
}
-(void) doSomething;
@end
@implementation MyClass
-(void) RunProcess:
{
printf("test");
}
-(void) doSomething:
{
[NSThread detachNewThreadSelector: @selector(RunProcess:) toTarget:self withObject: nil];
}
@end
int main(void)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
MyClass *myObj = [[MyClass alloc] init],
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1 myObj selector:@selector(doSomething:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有一个NSWindow可以关闭并重新打开(我已经打过电话[setReleasedWhenClosed: NO]).如何以编程方式检查它是打开还是关闭?
我已经阅读了文档和谷歌搜索,但看不到一个明智的方式来做到这一点.[isVisible]已弃用.[occlusionState]不是我追求的.我已经使用通知解决了这个问题,但我无法相信没有一些属性或方法NSWindow可以做到这一点
我有一个NSSplitView在两个NSViews中都有内容.左NSView有2个约束 - Equal Widths和Equal Heights.正确的NSView有一些简单的东西,比如NSTextField,它通过约束Center X Alignment和中心来集中Center Y Alighment.这是我希望在调整窗口和/或NSSplitView分隔符大小时的样子:

这就是发生的事情:

我已经尝试了大量的配置更改,我尝试使用NSSplitViewController与仅将NSSplitView放入NSViewController以编程方式调整更多参数,但我没有任何运气.每当调整窗口大小时,左视图总是占用多余的空间.分隔符也是如此(它可以调整大小,但放开鼠标按钮会使其向后快照).看来我在这里缺少一些基本的东西.
appkit ×10
cocoa ×6
macos ×6
objective-c ×3
nswindow ×2
instruments ×1
nssplitview ×1
quicklook ×1
runloop ×1
swift ×1
swiftui ×1
toolbar ×1
xcode ×1