gpt4 book ai didi

ios - PeerId(MCPeerID)定制

转载 作者:行者123 更新时间:2023-11-30 13:16:37 24 4
gpt4 key购买 nike

我最近构建了一个功能齐全的多点连接应用程序,但在尝试找到一种允许我的用户更改(或创建)个人peerId的方法时遇到了一些麻烦。 MCBrowserViewController 拾取连接到同一 wifi 网络的设备,但仅显示其设备名称,并且不允许用户创建自己的用户名。我应该如何最好地解决这个问题?我尝试了 initWithDisplayName() 但没有成功,并且没有发现任何与此相关的资源,仅在 Objective-C 中使用 Swift 编写。

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)

}
}

最佳答案

正如 @paulw11 上面指出的,远程用户只能看到设备名称的原因是因为您在这行代码中仅传入设备名称:

    self.peerID = MCPeerID(displayName: UIDevice.currentDevice().name)

例如,如果我希望我的设备在其他人的浏览器(tableview)中显示为 Xaphod,那么在我的设备上,代码需要是:

    self.peerID = MCPeerID(displayName: "Xaphod")

关于ios - PeerId(MCPeerID)定制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38155174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com