标签: appkit

macOS 下如何模拟内存不足的情况?

在开发和调试 macOS 应用程序时,有没有办法模拟系统范围内的“内存不足”事件或通知?

iOS 模拟器有这样的功能,但我似乎无法找出 macOS 下的等效项。

我感兴趣的是模拟内存不足的情况,看看班怎么样NSPurgeableDataIOSurface手柄被清除。

(除了编写一个不断分配内存的简单应用程序......)

macos xcode cocoa memory-management appkit

3
推荐指数
1
解决办法
777
查看次数

如何在 macOS 上使用 SwiftUI 显示 QLPreviewPanel?

尝试弄清楚如何在 iOS 和 macOS 上的 SwiftUI 中使用 QuickLook。我怀疑在不久的将来,将会有一些统一的 SwiftUI QL API,但是 \xe2\x80\x99 还看不到它,所以让 \xe2\x80\x99s 使用我们拥有的 \xe2\x80\xa6

\n\n

如何从 SwiftUI 视图呈现和配置 QLPreviewPanel?到目前为止,我有这个:

\n\n
struct 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)

quicklook appkit swiftui

3
推荐指数
1
解决办法
1617
查看次数

大苏尔轮廓视图可扩展项目已损坏

我已经启动了一个新的 macOS 项目(目前在 Big Sur beta 3 上),节点NSOutlineView似乎已损坏。分不清这是我还是操作系统。

这是一个演示该问题的示例项目。还有一个图像...

在此输入图像描述

正如您所看到的,单元与扩展 V 形重叠。单击任一 V 形图标会将第一行恢复到正确的布局,但不会将第二行恢复到正确的布局。此外,自动保存方法persistentObjectForItemitemForPersistentObject永远不会被调用。

测试项目非常简单——我所做的就是将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)

macos nsoutlineview appkit macos-big-sur

3
推荐指数
1
解决办法
1247
查看次数

NSWindow mouseEntered 没有子类化?

我有一个程序接受 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。

macos cocoa objective-c appkit

3
推荐指数
1
解决办法
453
查看次数

尽管没有强引用,但内存泄漏?

我正在进行性能测试,尝试测量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

3
推荐指数
1
解决办法
1168
查看次数

忽略AppKit中的UI事件

如果我想在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元素?

macos cocoa event-handling appkit

2
推荐指数
1
解决办法
5149
查看次数

自定义窗口标题+工具栏(ala.Mac App Store和Reeder for Mac)

我正在试图弄清楚如何创建"新的流行"组合窗口标题和工具栏,如Reeder for Mac和Mac App Store(http://www.apple.com/mac/app-store/)中所示.尝试谷歌搜索,但这似乎不是一个非常讨论的话题!

基本上; 它是一个无边界窗口,一直有自定义视图(在这种情况下,我如何获得工作交通灯按钮)?或者是否可以使用Interface Builder?

macos objective-c toolbar appkit nswindow

2
推荐指数
1
解决办法
1463
查看次数

FoundationTool中的Runloop

我正在写一个基础工具.我必须将线程分成不同的正在进行的任务.

我试图做线程,但它一直在崩溃.最后我想出了我需要运行自己的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)

macos cocoa objective-c appkit runloop

2
推荐指数
1
解决办法
270
查看次数

如何检查NSWindow是否开放

我有一个NSWindow可以关闭并重新打开(我已经打过电话[setReleasedWhenClosed: NO]).如何以编程方式检查它是打开还是关闭?

我已经阅读了文档和谷歌搜索,但看不到一个明智的方式来做到这一点.[isVisible]已弃用.[occlusionState]不是我追求的.我已经使用通知解决了这个问题,但我无法相信没有一些属性或方法NSWindow可以做到这一点

cocoa appkit nswindow

2
推荐指数
1
解决办法
2848
查看次数

使用自动布局,如何在不强制NSSplitView宽度的情况下将子视图置于NSSplitView中心?

我有一个NSSplitView在两个NSViews中都有内容.左NSView有2个约束 - Equal WidthsEqual Heights.正确的NSView有一些简单的东西,比如NSTextField,它通过约束Center X Alignment和中心来集中Center Y Alighment.这是我希望在调整窗口和/或NSSplitView分隔符大小时的样子:

在此输入图像描述

这就是发生的事情:

在此输入图像描述

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

cocoa appkit nssplitview

2
推荐指数
1
解决办法
290
查看次数