使用Swift实现/注册OS X服务

时间:2015-05-29 21:32:26

标签: macos swift cocoa osx-yosemite

我试图在Swift中实现一个简单的独立服务来静音/取消静音系统音量。该部分工作正常,但当我从热键或服务菜单调用服务时,我收到错误

静音[36967:3258511]找不到选择器toggleMute的服务提供者:userData:error:或toggleMute :: for service 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>

1 个答案:

答案 0 :(得分:2)

您需要使用toggleMute属性标记@objc方法,否则不会向Objective-C运行时注册选择器,后者负责调度对您服务的调用。