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.