简体   繁体   English

MCSessionDelegate要求类符合NSObjectProtocol

[英]MCSessionDelegate Requires Class to Conform to NSObjectProtocol

I was trying to use the MultipeerConnectivity library from Apple but my class would not stop throwing the error "Type LocalClient does not conform to NSObjectProtocol". 我试图使用Apple的MultipeerConnectivity库,但我的班级不会停止抛出错误“ Type LocalClient不符合NSObjectProtocol”。 Am I missing anything that would cause this error? 我是否遗漏了会导致此错误的任何内容?

import Foundation
import MultipeerConnectivity

class LocalClient : MCSessionDelegate {
    var availableServers : [Int]
    var session : MCSession
    var peerID : MCPeerID
    var browser : MCBrowserViewController

    init(name : String) {
        peerID = MCPeerID(displayName: name)

        session = MCSession(peer: peerID)
        session.delegate = self

        browser = MCBrowserViewController(serviceType: "JoinGame", session: session)
    }

    func session(session: MCSession!, peer peerID: MCPeerID!, didChangeState state: MCSessionState) {

    }

    func session(session: MCSession!, didReceiveData data: NSData!, fromPeer peerID: MCPeerID!) {

    }

    func session(session: MCSession!, didStartReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, withProgress progress: NSProgress!) {

    }

    func session(session: MCSession!, didFinishReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, atURL localURL: NSURL!, withError error: NSError!) {

    }

    func session(session: MCSession!, didReceiveStream stream: NSInputStream!, withName streamName: String!, fromPeer peerID: MCPeerID!) {

    }

}

Edit: Formatting. 编辑:格式化。

The MCSessionDelegate protocol is derived from NSObjectProtocol . MCSessionDelegate协议是从NSObjectProtocol派生的。 Therefore your class should be a subclass of NSObject so that it inherits all the NSObjectProtocol methods: 因此,您的类应该是NSObject的子类,以便它继承所有NSObjectProtocol方法:

class LocalClient : NSObject, MCSessionDelegate {  }

This also requires you to call super.init() (after values have been assigned to all properties): 这还要求您调用super.init() (在将值分配给所有属性之后):

init(name : String) {
    peerID = MCPeerID(displayName: name)
    session = MCSession(peer: peerID)
    availableServers = []
    browser = MCBrowserViewController(serviceType: "JoinGame", session: session)

    super.init()

    session.delegate = self
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM