2016-03-24 10 views
2

Ich habe diesen Code verwendet, um eine ordnungsgemäße Verbindung herzustellen. Ich habe sowohl den iPhone Simulator als auch das physische Gerät ausprobiert. Ich konnte es nicht richtig anschließen. Wie es in seinem Zustand als "Connecting ..." zeigt und direkt in den Zustand "Not Connected" geht. Ich habe viel erforscht und nichts gefunden, was dieses Problem lösen könnte. Außerdem habe ich im Apple Developer Forum einige Fragen gelesen, dass so viele Leute das gleiche Problem hatten. Aber es gibt noch keine richtige Lösung. Bitte überprüfen Sie den Code. Und danke im Voraus.MultiPeer Connectivity funktioniert nicht iOS 9.3 Xcode 7.3

import UIKit 
import MultipeerConnectivity 

//MARK: MCNearbyServiceAdvertiserDelegate 

extension ViewController : 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) 
    { 
     invitationHandler(true, self.session) // Accepting an invitation 
     // self.serviceBrowser.stopBrowsingForPeers() 
    } 

    // Advertising did not start due to an error. 

    func advertiser(advertiser: MCNearbyServiceAdvertiser, didNotStartAdvertisingPeer error: NSError) 
    { 
     print("\(error.localizedDescription)") 
    } 
} 

//MARK: MCNearbyServiceBrowserDelegate 

extension ViewController : MCNearbyServiceBrowserDelegate 
{ 
    // Found a nearby advertising peer. 

    func browser(browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) 
    { 
     browser.invitePeer(peerID, toSession: self.session, withContext: nil, timeout: 10) // Inviting a peer to connect to my session 
     // self.serviceAdvertiser.stopAdvertisingPeer() 
    } 

    // A nearby peer has stopped advertising. 

    func browser(browser: MCNearbyServiceBrowser, lostPeer peerID: MCPeerID) 
    { 
     print("Lost") 
    } 

    // Browsing did not start due to an error. 

    func browser(browser: MCNearbyServiceBrowser, didNotStartBrowsingForPeers error: NSError) 
    { 
     print("\(error.localizedDescription)") 
    } 
} 

//MARK: MCSessionDelegate 

extension ViewController : MCSessionDelegate 
{ 
    // Remote peer changed state. 

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

     case MCSessionState.Connected: 
      print("Connected: \(peerID.displayName)") 

     case MCSessionState.Connecting: 
      print("Connecting: \(peerID.displayName)") 

     case MCSessionState.NotConnected: 
      print("Not Connected: \(peerID.displayName)") 
     } 
    } 

    // Received data from remote peer. 

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

      let str = NSString(data: data, encoding: NSUTF8StringEncoding) as! String 
      print("Value recieved : \(str)") 
     } 

    } 

    // 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). 

    func session(session: MCSession, didReceiveCertificate certificate: [AnyObject]?, fromPeer peerID: MCPeerID, certificateHandler: (Bool) -> Void) 
    { 

    } 
} 

//MARK: ViewController 

class ViewController: UIViewController { 

    // View Did Load 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.start() 
    } 

    // User clicked on a button, send value alvin to all connected devices 

    @IBAction func helloclicked(sender: UIButton) 
    { 
     self.sendValuesToPeer("alvin") 
    } 


    private enum EHRServiceType : String 
    { 
     case Update = "HelloUpdate" 
    } 

    var myOwnPeerId : MCPeerID! 

    // Browser 

    var advertiserAssistant : MCAdvertiserAssistant! 

    // For finding the devices 

    var serviceAdvertiser : MCNearbyServiceAdvertiser! 

    // For listening to devices 

    var serviceBrowser : MCNearbyServiceBrowser! 

    // Session 

    // var session : MCSession! 

    lazy var session : MCSession = { 

      let session = MCSession(peer: self.myOwnPeerId, securityIdentity: nil, encryptionPreference: MCEncryptionPreference.Optional) 
      session.delegate = self 
      return session 

    }() 

    func start() { 

     self.myOwnPeerId = MCPeerID(displayName: "Alvin \(UIDevice.currentDevice().name)") 

     // Advertising 

     self.serviceAdvertiser = MCNearbyServiceAdvertiser(peer: self.myOwnPeerId, discoveryInfo: nil, serviceType: EHRServiceType.Update.rawValue) 

     // Browsing 

     self.serviceBrowser = MCNearbyServiceBrowser(peer: self.myOwnPeerId, serviceType: EHRServiceType.Update.rawValue) 

     self.advertiserAssistant = MCAdvertiserAssistant(serviceType: EHRServiceType.Update.rawValue, discoveryInfo: nil, session: self.session) 

     // Session 

     // self.session = MCSession(peer: self.myOwnPeerId, securityIdentity: nil, encryptionPreference: MCEncryptionPreference.Required) 

     // Session 

     // self.session.delegate = self 

     // Browsing 

     self.serviceBrowser.delegate = self 
     self.serviceBrowser.startBrowsingForPeers() // Starting browsing... 

     // Avertising 

     self.serviceAdvertiser.delegate = self 
     self.serviceAdvertiser.startAdvertisingPeer() // Starting advertising... 

     self.advertiserAssistant.start() 

    } 

    override func viewDidAppear(animated: Bool) { 

     // let browser = MCBrowserViewController(browser: self.serviceBrowser, session: self.session) 

     // self.presentViewController(browser, animated: true, completion: nil) 
    } 

    //MARK: Send values to peer 

    func sendValuesToPeer(name : String) 
    { 
     if self.session.connectedPeers.count > 0 
     { 
      let value = name.dataUsingEncoding(NSUTF8StringEncoding) 

      do 
      { 
       try self.session.sendData(value!, toPeers: self.session.connectedPeers, withMode: MCSessionSendDataMode.Reliable) 
      } 
      catch 
      { 

      } 

     } 
     else 
     { 
      print("No peers") 
     } 
    } 
} 

Ich habe auch so viele Situationen ausprobiert, wie ohne Verschlüsselung, mit Verschlüsselung, mit dem gleichen Projektziel (Während in zwei Computern iPhone Simulator verwendet wird), durch Werbung zu stoppen, wenn ein Gerät zu finden, durch Surfen zu stoppen, wenn eine Einladung geschickt. Aber keine dieser Alternativen hat mein Problem gelöst, es ist immer noch in "Connecting ..." und geht direkt auf "Not Connected". Bitte lass mich deine Gedanken wissen.

Antwort

1

Überprüfen Sie zunächst, ob Sie sich im selben WLAN-Netzwerk befinden.

Aber nicht vergessen, Bulutooth funktioniert nicht im Simulator.

auch, Gerät und Simulator ist völlig in Ordnung. Ich arbeite mit Multiplikator für mehrere Monate. Ich habe festgestellt, Verbindung - Disconnected Zustand nur, wenn beide Geräte/Peers in den verschiedenen WLAN/Bluetooth-Netzwerk sind.

Wenn alle diese sind Okay. Dann

read this and get sample project.

Verwandte Themen