gpt4 book ai didi

cocoa - XPC 服务返回 NSAttributtedString

转载 作者:行者123 更新时间:2023-12-03 17:20:35 28 4
gpt4 key购买 nike

我在从 XPC 服务的 block 回调中传输 NSAttributtedString 时遇到了很大的问题。

我试图将基本字符串返回为:

NSDictionary *arrayComa = @{NSForegroundColorAttributeName:[NSColor colorWithRGB:0xD35250],
NSFontAttributeName:[NSFont fontWithName:@"Monaco" size:11]};

NSMutableAttributedString *testString = [[NSMutableAttributedString alloc] initWithString:@"{}" attributes:arrayComa];

我还将传入响应列入白名单:

 let incommingClasses:Set = Set(arrayLiteral: [NSMutableAttributedString.self, NSAttributedString.self, NSColor.self, NSFont.self, NSString.self, ])
connectionService.remoteObjectInterface?.setClasses(incommingClasses, forSelector: attributtedText:withReply:, argumentIndex: 0, ofReply: true)

无论我做什么,我都会遇到错误:

Exception caught during decoding of received reply to message     'Exception caught during decoding of received reply to message 'attributtedText:withReply':, dropping incoming message and calling failure block.

Exception: Exception while decoding argument 0 (#1 of invocation):
<NSInvocation: 0x6000006649c0>
return value: {v} void
target: {@?} 0x0 (block)
argument 1: {@"NSMutableAttributedString"} 0x0

Exception: value for key '<no key>' was of unexpected class 'NSMutableAttributedString'. Allowed classes are '{(
(
NSMutableAttributedString,
NSAttributedString,
NSColor,
NSFont,
NSString
)

)}'。

有人通过XPC服务成功传输NSAttributtedText吗?

最佳答案

编辑:我在 devforums 上收到了对我的消息的回复,解决方法是使用 NSSet 并在传递给 setClasses() 时将其转换为 Set。另一个问题是,所有选择器已经有预设的类,因此您需要将自己的类添加到当前的类中,而不是仅设置您自己的类。这是一个工作代码:

        let interface = NSXPCInterface(withProtocol: MyProtocol.self)

let expectedClasses = NSSet.setWithArray([[NSMutableAttributedString.self, NSAttributedString.self, NSColor.self, NSFont.self])
let currentExpectedClasses = interface.classesForSelector("attributtedText:withReply:", argumentIndex: 0, ofReply: false) as NSSet

let allClasses = currentExpectedClasses.setByAddingSet(expectedClasses)

interface.setClasses(allClasses as Set<NSObject>, forSelector: "attributtedText:withReply:", argumentIndex: 0, ofReply: false)

原始答案:

这只是部分答案,因为我还没有找到正确的方法来做到这一点,但是

let incommingClasses:Set = Set(arrayLiteral: [NSMutableAttributedString.self, NSAttributedString.self, NSColor.self, NSFont.self, NSString.self, ])

返回一个 Set ,这不是你想要的。我假设您添加了“arrayLiteral”参数标签,因为编译器告诉您了,但是这会编译:

let foo = Set(["string1", "string2"])

它返回一个 Set

问题是我找不到创建类类型集的方法。我在苹果的开发论坛上问过:https://devforums.apple.com/thread/271316但除非我遗漏了一些明显的东西,否则这看起来像是一个 API 错误。

关于cocoa - XPC 服务返回 NSAttributtedString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30201960/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com