小编Dej*_*jal的帖子

SMLoginItemSetEnabled有时会无声地启动沙盒UI帮助程序

我有一个沙盒的应用程序,并包含一个帮助器,提供一些UI(作为一个全屏窗口,但也可以是一个状态项或类似的).

这很有用......大多数时候.但有时却没有; 它只是默默地无法启动帮助器.

由于帮助程序有UI,我用SMLoginItemSetEnabled它来加载它,然后NSXPCConnection与它进行通信.但有时SMLoginItemSetEnabled无法启动它,同时仍然返回YES.

这似乎是由于应用程序在机器某处的旧版本构建; 这似乎混淆了登录机制.删除旧应用程序修复了它,但我不能合理地期望用户这样做(有些人喜欢保留旧版本).

我可以通过比较-[NSWorkspace URLForApplicationWithBundleIdentifier:]应用程序包中帮助程序的URL 的结果来检测这种情况,但是不得不要求用户删除其他应用程序并不是一个非常优雅的解决方案.

是否有任何方法可以SMLoginItemSetEnabled始终使用当前应用程序包中的登录项,而不是磁盘上其他位置的随机项?

或者在最近的OS版本中有任何改变,以支持更优雅的UI帮助程序机制?

我在这里和其他地方已经阅读了很多关于这个主题的许多其他问题,看起来这个笨重的机制仍然是最好的解决方案,但也许我错过了一些东西.

macos cocoa xpc appstore-sandbox

10
推荐指数
1
解决办法
1433
查看次数

Cocoa类命名约定的最佳实践

我正在整理古老的Cocoa代码以使用现代命名约定.关于最佳实践的讨论很多,但我不确定一件事.

我正在考虑为类别方法名称添加前缀,以确保唯一性.看起来普遍认为这是一个好主意,尽管大多数人可能都不会打扰.

我的问题是:NSDictionary-copyDeep深度复制这样的类别方法怎么样?用于命名的方法-deepCopy,但是当分析器查找"copy"的前缀时,我颠倒了这些词.因此我可能无法添加前缀.并且在方法名称的中间或末尾具有"前缀"似乎是混乱且不一致的.

我也对前缀样式的想法感兴趣 - 我目前使用DS(对于Dejal Systems)类前缀.但我知道Apple现在想为自己保留所有双字符前缀,所以我正在考虑使用Dejal,例如我的类DSManagedObject将被重命名为DejalManagedObject.而且又回到了类,他们的方法将被重命名添加一个dejal前缀,例如从-substringFromString:-dejalSubstringFromString:.但是-dejalCopyDeep会混淆分析仪,所以也许我不得不对这些方法不一致,并使用-copyDeepDejal-copyDeep_dejal

一旦我清理了它,我将重新发布我的类别和各种类作为开源,因此遵循最新的约定将是有益的.

cocoa categories

9
推荐指数
1
解决办法
632
查看次数

通过拖动背景移动窗口(movableByWindowBackground)

我有一个窗口,我希望用户能够通过拖动窗口内容中的任何位置(而不仅仅是标题栏)来移动.我知道这可以通过该NSWindow movableByWindowBackground方法完成,但是这似乎不能单独使用.

收集的是压倒一切的NSView mouseDownCanMoveWindow可能是必要的.但我不能轻易地为所有父视图(拆分视图等)做到这一点.使它成为一个纹理窗口没有帮助.不出所料,子类化NSWindow覆盖isMovableByWindowBackground也没有帮助.

是否真的有必要在窗口中子类化所有父视图以使其工作?

macos cocoa nswindow

6
推荐指数
1
解决办法
1241
查看次数

不使用 NSMatrix 的单选按钮

OS X 10.10 的 AppKit 发行说明中,Apple 写道:

NSMatrix 的使用已被非正式地弃用。我们希望在后续版本中添加正式弃用宏,但同时不鼓励使用它。NSMatrix 的主要用途是单选按钮组,因此请记住,对于在 10.8 或更高版本上链接的应用程序,共享相同父视图和操作的单选按钮将作为一个组运行。

这一切都很好,但在使用独立按钮时管理无线电组很烦人。

我搜索了其他人关于如何处理这个问题的建议,以避免必须state单独设置每个按钮,找到选定的收音机等,但找不到太多关于它的讨论。我猜大多数人都在等待苹果正式弃用NSMatrix,并希望提供更好的机制。

macos cocoa nsmatrix nsbutton

5
推荐指数
1
解决办法
1395
查看次数

具有固定列的 SwiftUI 垂直和水平滚动视图

我需要制作一个可以垂直和水平滚动的 SwiftUI 视图,具有多个列,其中最左边的视图不能水平滚动,但下面的视图可以。

就像带有一些冻结标题列的电子表格一样思考。

我有一些工作,有点。GIF 显示,垂直滚动时会移动所有单元格,水平滚动时只会滚动“自定义”单元格。

但是,我还希望有一个冻结的标题行,就像 Mac 表格视图的列标题一样,它保持浮动在顶部,与下面的行的固定和水平滚动列对齐。我还没弄清楚这一点。

在此输入图像描述

这是我的原型代码:

        ScrollView  {
            ZStack(alignment: .leading) {
                ScrollView (.horizontal) {
                    LazyVStack(spacing: 20) {
                        ForEach(0..<20) { row in
                            LazyHStack(spacing: 20) {
                                Text("")
                                    .frame(width: 250, height: 200)
                                    .background(Color.clear)
                                
                                ForEach(0..<10) { column in
                                    Text("Custom \(row), \(column)")
                                        .foregroundColor(.white)
                                        .font(.largeTitle)
                                        .frame(width: 200, height: 200)
                                        .background(Color.red)
                                }
                            }
                        }
                    }
                }
                
                VStack(spacing: 20) {
                    ForEach(0..<20) { row in
                        HStack(spacing: 2) {
                            Text("\(row)")
                                .foregroundColor(.yellow)
                                .font(.largeTitle)
                                .frame(width: 50, height: 200)
                                .background(Color.blue)
                            
                            Text("Fixed \(row)")
                                .foregroundColor(.yellow)
                                .font(.largeTitle)
                                .frame(width: 200, height: 200)
                                .background(Color.blue) …
Run Code Online (Sandbox Code Playgroud)

swiftui

5
推荐指数
0
解决办法
1568
查看次数

字典的深层副本在Xcode 4.2中给出了分析错误

我在NSDictionary类别中有以下方法,可以进行深层复制,工作正常.

我刚从Xcode 4.1升级到4.2,Analyze函数为此代码提供了两个分析器警告,如下所示:

- (id)deepCopy;
{
    id dict = [[NSMutableDictionary alloc] init];
    id copy;

    for (id key in self)
    {
        id object = [self objectForKey:key];

        if ([object respondsToSelector:@selector(deepCopy)])
            copy = [object deepCopy];
        else
            copy = [object copy];

        [dict setObject:copy forKey:key];

        // Both -deepCopy and -copy retain the object, and so does -setObject:forKey:, so need to -release:
        [copy release];  // Xcode 4.2's Analyze says this is an incorrect decrement of the reference count?!
    }

    return dict;  // Xcode 4.2's Analyze says …
Run Code Online (Sandbox Code Playgroud)

cocoa deep-copy analyzer clang-static-analyzer xcode4.2

3
推荐指数
2
解决办法
1595
查看次数