小编Tri*_*nal的帖子

NSTextView 中的 MouseMoved 通知会生成消息“共享项目数组为空”

我使用自定义mouseMove事件将NSTextView光标设置为位于内容插图之外的指针。当它位于可编辑区域内时,我调用[super mouseMove]

- (void)mouseMoved:(NSEvent*)event {
    NSPoint point = [self convertPoint:event.locationInWindow fromView:nil];
    
    if ((point.x > self.textContainerInset.width &&
         point.x < self.frame.size.width - self.textContainerInset.width)
    ) {
        [super mouseMoved:event];
    } else if (point.x > 10) {
        [NSCursor.arrowCursor set];
    }
}
Run Code Online (Sandbox Code Playgroud)

当在文本中选择换行符(意味着行末尾的空白部分)并将鼠标悬停在所选内容上时,[super mouseMoved:event]鼠标移动的每个像素都会生成以下消息:

Appname[29357:853497] [Framework] Shared items array is empty
Appname[29357:853497] [Framework] No shared items can be accessed
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么会发生这种情况,原因可能是什么?

编辑: 即使没有子类化,这似乎也会发生NSTextView。这可能是 macOS Catalina 中的一个错误。对我来说,它似乎不会造成任何其他问题。

macos cocoa objective-c nstextview appkit

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

如何从 OSSpinLock 迁移到 os_unfair_lock()?

从 macOS 10.12 开始,OSSpinLock已弃用。XCode 错误消息敦促我os_unfair_lock_unlock()改用。

作为我依赖的一些开源东西的遗产,我从 2010 年开始使用 RegexKitLite。

如何转换自旋锁类型?简单的解锁和锁定我可以管理,但这些比较让我头疼:

if(rkl_cacheSpinLock != (OSSpinLock)0) { ... }
Run Code Online (Sandbox Code Playgroud)

rkl_cacheSpinLock是类型os_unfair_lock并已初始化。OSSpinLock 似乎是 type int,所以这个 if 语句显然不起作用。

任何人都可以指出我解决这个问题的正确方法吗?我对 C 不太熟悉,也不太了解指针的算术运算。

编辑

在学习了一些 C 之后,我开始了解类型转换。我想出了一个似乎有效的解决方案。我对这个级别的操作系统功能的理解是不存在的。os_unfair_lock 对于傻瓜来说并没有太多的记录,但看起来我没有破坏任何东西。

if (rkl_cacheSpinLock._os_unfair_lock_opaque != 0) { ... }

regex macos objective-c spinlock regexkitlite

4
推荐指数
1
解决办法
1835
查看次数

标签 统计

macos ×2

objective-c ×2

appkit ×1

cocoa ×1

nstextview ×1

regex ×1

regexkitlite ×1

spinlock ×1