J'ai récemment construit une application de connectivité multipeer pleinement fonctionnelle et ont eu quelques difficultés à essayer de trouver un moyen de permettre aux utilisateurs de mes changement (ou créer) un personnel Peerid. Le MCBrowserViewController sélectionne les périphériques connectés au même réseau Wi-Fi, mais affiche uniquement le nom de leur périphérique et ne permet pas aux utilisateurs de créer leur propre nom d'utilisateur. Comment est-ce que je devrais aller à ce sujet? J'ai essayé initWithDisplayName() en vain et n'ai trouvé aucune ressource relative à ceci écrit en Swift seulement en Objective-C.Peerid (MCPeerID) personnalisation
import UIKit
import MultipeerConnectivity
class ViewController: UIViewController, MCBrowserViewControllerDelegate, MCSessionDelegate {
let serviceType = "LCOC-Chat"
var browser : MCBrowserViewController!
var assistant : MCAdvertiserAssistant!
var session : MCSession!
var peerID: MCPeerID!
@IBOutlet var chatView: UITextView!
@IBOutlet var messageField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.peerID = MCPeerID(displayName: UIDevice.currentDevice().name)
self.session = MCSession(peer: peerID)
self.session.delegate = self
// create the browser viewcontroller with a unique service name
self.browser = MCBrowserViewController(serviceType:serviceType,
session:self.session)
self.browser.delegate = self;
self.assistant = MCAdvertiserAssistant(serviceType:serviceType,
discoveryInfo:nil, session:self.session)
// tell the assistant to start advertising our fabulous chat
self.assistant.start()
}
@IBAction func sendChat(sender: UIButton) {
// Bundle up the text in the message field, and send it off to all
// connected peers
let msg = self.messageField.text.dataUsingEncoding(NSUTF8StringEncoding,
allowLossyConversion: false)
var error : NSError?
self.session.sendData(msg, toPeers: self.session.connectedPeers,
withMode: MCSessionSendDataMode.Unreliable, error: &error)
if error != nil {
print("Error sending data: \(error?.localizedDescription)")
}
self.updateChat(self.messageField.text, fromPeer: self.peerID)
self.messageField.text = ""
}
func updateChat(text : String, fromPeer peerID: MCPeerID) {
// Appends some text to the chat view
// If this peer ID is the local device's peer ID, then show the name
// as "Me"
var name : String
switch peerID {
case self.peerID:
name = "Me"
default:
name = peerID.displayName
}
// Add the name to the message and display it
let message = "\(name): \(text)\n"
self.chatView.text = self.chatView.text + message
}
@IBAction func showBrowser(sender: UIButton) {
// Show the browser view controller
self.presentViewController(self.browser, animated: true, completion: nil)
}
func browserViewControllerDidFinish(
browserViewController: MCBrowserViewController!) {
// Called when the browser view controller is dismissed (ie the Done
// button was tapped)
self.dismissViewControllerAnimated(true, completion: nil)
}
func browserViewControllerWasCancelled(
browserViewController: MCBrowserViewController!) {
// Called when the browser view controller is cancelled
self.dismissViewControllerAnimated(true, completion: nil)
}
func session(session: MCSession!, didReceiveData data: NSData!,
fromPeer peerID: MCPeerID!) {
// Called when a peer sends an NSData to us
// This needs to run on the main queue
dispatch_async(dispatch_get_main_queue()) {
var msg = NSString(data: data, encoding: NSUTF8StringEncoding)
self.updateChat(msg, fromPeer: peerID)
}
}
// The following methods do nothing, but the MCSessionDelegate protocol
// requires that we implement them.
func session(session: MCSession!,
didStartReceivingResourceWithName resourceName: String!,
fromPeer peerID: MCPeerID!, withProgress progress: NSProgress!) {
// Called when a peer starts sending a file to us
}
func session(session: MCSession!,
didFinishReceivingResourceWithName resourceName: String!,
fromPeer peerID: MCPeerID!,
atURL localURL: NSURL!, withError error: NSError!) {
// Called when a file has finished transferring from another peer
}
func session(session: MCSession!, didReceiveStream stream: NSInputStream!,
withName streamName: String!, fromPeer peerID: MCPeerID!) {
// Called when a peer establishes a stream with us
}
func session(session: MCSession!, peer peerID: MCPeerID!,
didChangeState state: MCSessionState) {
// Called when a connected peer changes state (for example, goes offline)
}
}
Pouvez-vous montrer le code où vous créez le MCPeerID local? – Paulw11
@ Paulw11 Je viens de l'ajouter à mon message, laissez-moi savoir si vous avez des commentaires/suggestions concernant ma question. – Alex7
Vous utilisez le nom du périphérique local lorsque vous créez le pair local. Voulez-vous dire que cela ne fonctionne pas lorsque vous utilisez une chaîne différente? Pouvez-vous montrer comment vous avez essayé cela? – Paulw11