我正在使用MCNearbyServiceBrowser
来发现附近的蓝牙设备&邀请invitePeer: toSession: withContext: timeout:
。
现在的问题是我想保留所有连接设备的历史记录。如果再次附近,将来重新连接它们(通过在UITableview
中单击它们)。这可能吗?它是否符合Apple的政策?感谢。
更新
我已经实现了目标,因为“jamdaddy25”回答(在他回答:P之前)&它的工作正常......但是,如果两个设备具有相同的名称呢?在这种情况下,将不显示列表中的两个或更多设备之一的问题。我不希望这样。顺便说一句,感谢您的回复。
答案 0 :(得分:2)
您可以保留peerID显示名称。这是MCPeerID上的属性。当您开始浏览时,要么在用户选择之前连接的对等点之前,要么在进入该屏幕时开始浏览,请循环访问附近的对等点,看看您是否有显示名称匹配。如果是这样,您可以系统地发送邀请并重新建立连接。
您甚至可以这样做,因此以前唯一可选择的连接是当前附近的对等连接。
<强>更新强>: 因此,为了确保您没有对等名称冲突,您需要使名称唯一。 我知道如何执行此操作的最佳方法是创建基于UUID的名称。我将其保存在一个简单的对象(下面的UserPeerInfo)中并将其保存/加载到NSUserDefaults,因此该对等名称将始终用于此对等
// Initialize with any stored data
if (!_userPeerInfo) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"userPeerInfo"]) {
NSData *userPeerInfoData = [defaults objectForKey:@"userPeerInfo"];
_userPeerInfo = (UserPeerInfo*)[NSKeyedUnarchiver unarchiveObjectWithData:userPeerInfoData];
} else
{
NSString *peerName = [[NSUUID UUID] UUIDString];
_userPeerInfo.peerName = peerName;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// Create an NSData representation
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_userPeerInfo];
[defaults setObject:data forKey:@"userPeerInfo"];
[defaults synchronize];
}
}
然后在设置对等名称并初始化时,使用该对等名称,如正常
self.peerId = [[MCPeerID alloc] initWithDisplayName:self.userPeerInfo.peerName];
self.advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:self.peerId discoveryInfo:info serviceType:kServiceType];
self.advertiser.delegate = self;
[self.advertiser startAdvertisingPeer];