2015-06-30 4 views
2

Я пытаюсь из this tutorial и возникли некоторые проблемы с кодом:Swift - MultipeerConnectivity Тип не соответствует протоколу

class MPCManager: NSObject, MCSessionDelegate, MCNearbyServiceBrowserDelegate, MCNearbyServiceAdvertiserDelegate { 

я получил ошибку:

Type 'MPCManager' does not comform to protocol 'MCSessionDelegate'

Type 'MPCManager' does not comform to protocol 'MCNearbyServiceBrowserDelegate'

Type 'MPCManager' does not comform to protocol 'MCNearbyServiceAdvertiserDelegate'

Но я скачать образец файла он не получил ту же ошибку. Какую часть я пропустил?

ответ

4

Для выполнения этих протоколов вам необходимо реализовать все необходимые методы делегирования MCSessionDelegate и MCNearbyServiceBrowserDelegate и MCNearbyServiceAdvertiserDelegate.

2

Вы должны добавить все необходимые методы делегирования этого протокола.

Я добавил весь необходимый метод в код ниже:

import Foundation 
import MultipeerConnectivity 


class MPCManager: NSObject, MCSessionDelegate, MCNearbyServiceBrowserDelegate, MCNearbyServiceAdvertiserDelegate { 

    //Type 'MPCManager' does not comform to protocol 'MCSessionDelegate' 
    // Remote peer changed state 
    func session(session: MCSession!, peer peerID: MCPeerID!, didChangeState state: MCSessionState){ 

    } 

    // Received data from remote peer 
    func session(session: MCSession!, didReceiveData data: NSData!, fromPeer peerID: MCPeerID!){ 

    } 

    // Received a byte stream from remote peer 
    func session(session: MCSession!, didReceiveStream stream: NSInputStream!, withName streamName: String!, fromPeer peerID: MCPeerID!){ 

    } 

    // Start receiving a resource from remote peer 
    func session(session: MCSession!, didStartReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, withProgress progress: NSProgress!){ 

    } 

    // Finished receiving a resource from remote peer and saved the content in a temporary location - the app is responsible for moving the file to a permanent location within its sandbox 
    func session(session: MCSession!, didFinishReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, atURL localURL: NSURL!, withError error: NSError!){ 

    } 


    //Type 'MPCManager' does not comform to protocol 'MCNearbyServiceBrowserDelegate' 

    // Found a nearby advertising peer 
    func browser(browser: MCNearbyServiceBrowser!, foundPeer peerID: MCPeerID!, withDiscoveryInfo info: [NSObject : AnyObject]!){ 

    } 

    // A nearby peer has stopped advertising 
    func browser(browser: MCNearbyServiceBrowser!, lostPeer peerID: MCPeerID!){ 

    } 

    //Type 'MPCManager' does not comform to protocol 'MCNearbyServiceAdvertiserDelegate' 
    // Incoming invitation request. Call the invitationHandler block with YES and a valid session to connect the inviting peer to the session. 
    func advertiser(advertiser: MCNearbyServiceAdvertiser!, didReceiveInvitationFromPeer peerID: MCPeerID!, withContext context: NSData!, invitationHandler: ((Bool, MCSession!) -> Void)!){ 

    } 

} 

Если вы хотите проверить, какие необходимые методы для конкретного делегата, то просто команда + нажмите на этом делегат, и вы найдете все методы связанный с этим делегатом предположим, если вы командуете + щелчок на MCSessionDelegate, то вы увидите что-то вроде этого:

// Delegate methods for MCSession 
protocol MCSessionDelegate : NSObjectProtocol { 

    // Remote peer changed state 
    func session(session: MCSession!, peer peerID: MCPeerID!, didChangeState state: MCSessionState) 

    // Received data from remote peer 
    func session(session: MCSession!, didReceiveData data: NSData!, fromPeer peerID: MCPeerID!) 

    // Received a byte stream from remote peer 
    func session(session: MCSession!, didReceiveStream stream: NSInputStream!, withName streamName: String!, fromPeer peerID: MCPeerID!) 

    // Start receiving a resource from remote peer 
    func session(session: MCSession!, didStartReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, withProgress progress: NSProgress!) 

    // Finished receiving a resource from remote peer and saved the content in a temporary location - the app is responsible for moving the file to a permanent location within its sandbox 
    func session(session: MCSession!, didFinishReceivingResourceWithName resourceName: String!, fromPeer peerID: MCPeerID!, atURL localURL: NSURL!, withError error: NSError!) 

    // Made first contact with peer and have identity information about the remote peer (certificate may be nil) 
    optional func session(session: MCSession!, didReceiveCertificate certificate: [AnyObject]!, fromPeer peerID: MCPeerID!, certificateHandler: ((Bool) -> Void)!) 
} 

Где только последний метод является необязательным, так что если вы не добавить ваш делегат отлично работает, но вы должны добавить все выше 5 методов в ваш класс для соответствия протоколу.

Надеюсь, это поможет.

0

Необходимо выполнить протоколы делегатов. Вы можете узнать это при наборе функций в xcode.

+0

Я хотел бы добавить, что если вы видите сообщенные ошибки (несоответствующие), которые, если вы нажмете на красный круг, можете увидеть на левой панели ошибки и развернуть ошибку. Затем Xcode укажет, какая процедура имеет проблему или какая процедура отсутствует. Кроме того, вы можете начать вводить имя функции в разделе кода, и появится объявление. – LevinsonTechnologies

Смежные вопросы