Implementing/Registering OS X 服务 Swift
Implementing/Registering OS X Service with Swift
我正在尝试在 Swift 系统卷 mutes/unmutes 中实现一个简单的独立服务。那部分工作正常,但是当我从热键或服务菜单调用服务时,出现错误
静音[36967:3258511] 找不到选择器的服务提供商toggleMute:userData:error: 或 toggleMute:: 服务 toggleMute
main.swift:
import AppKit
import AudioToolbox
class Muter {
var muted: Bool {...}
//Service Method
func toggleMute(pboard: NSPasteboard, userData: String, error: NSErrorPointer) {
println("Service mute called")
muted = !muted
}
}
NSRegisterServicesProvider(Muter(), "Mute")
NSRunLoop.currentRunLoop().run()
Info.plist:
<key>NSServices</key>
<array>
<dict>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>Toggle Mute</string>
</dict>
<key>NSMessage</key>
<string>toggleMute</string>
<key>NSPortName</key>
<string>Mute</string>
</dict>
</array>
您需要使用 @objc
属性标记 toggleMute
方法,否则选择器将不会注册到 Objective-C 运行时,后者负责将调用分派给您的服务。
我正在尝试在 Swift 系统卷 mutes/unmutes 中实现一个简单的独立服务。那部分工作正常,但是当我从热键或服务菜单调用服务时,出现错误
静音[36967:3258511] 找不到选择器的服务提供商toggleMute:userData:error: 或 toggleMute:: 服务 toggleMute
main.swift:
import AppKit
import AudioToolbox
class Muter {
var muted: Bool {...}
//Service Method
func toggleMute(pboard: NSPasteboard, userData: String, error: NSErrorPointer) {
println("Service mute called")
muted = !muted
}
}
NSRegisterServicesProvider(Muter(), "Mute")
NSRunLoop.currentRunLoop().run()
Info.plist:
<key>NSServices</key>
<array>
<dict>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>Toggle Mute</string>
</dict>
<key>NSMessage</key>
<string>toggleMute</string>
<key>NSPortName</key>
<string>Mute</string>
</dict>
</array>
您需要使用 @objc
属性标记 toggleMute
方法,否则选择器将不会注册到 Objective-C 运行时,后者负责将调用分派给您的服务。