Я знаю, что этот вопрос задавался много раз, но после прочтения каждого из них более нескольких раз, я до сих пор не могу заставить мой Multipeer Connectivity
работать. Я отправляю, но не получаю приглашение. Вот код:iOS Multipeer Connectivity didReceiveInvitationFromPeer не
@implementation MPCManager
- (id)init {
self = [super init];
if (self) {
_myPeerID = nil;
_session = nil;
_browser = nil;
_advertiser = nil;
}
return self;
}
- (void)automaticBrowseAndAdvertiseWithName:(NSString *)displayName {
_myPeerID = [[MCPeerID alloc] initWithDisplayName:displayName];
_session = [[MCSession alloc] initWithPeer:_myPeerID];
_session.delegate = self;
_advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:_myPeerID
discoveryInfo:nil
serviceType:@"trm-s"];
_advertiser.delegate = self;
[_advertiser startAdvertisingPeer];
_browser = [[MCNearbyServiceBrowser alloc] initWithPeer:_myPeerID
serviceType:@"trm-s"];
_browser.delegate = self;
[_browser startBrowsingForPeers];
}
- (void)session:(MCSession *)session
didReceiveCertificate:(NSArray *)certificate
fromPeer:(MCPeerID *)peerID
certificateHandler:(void (^)(BOOL accept))certificateHandler {
certificateHandler(YES);
}
- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser
didReceiveInvitationFromPeer:(MCPeerID *)peerID
withContext:(NSData *)context
invitationHandler:(void (^)(BOOL,
MCSession *))invitationHandler {
NSLog(@"This is NOT getting called");
}
- (void)browser:(MCNearbyServiceBrowser *)browser
didNotStartBrowsingForPeers:(NSError *)error {
NSLog(@"%@", [error localizedDescription]);
}
- (void)browser:(MCNearbyServiceBrowser *)browser
foundPeer:(MCPeerID *)peerID
withDiscoveryInfo:(NSDictionary *)info {
NSLog(@"This IS getting called");
}
- (void)invitePeer:(MCPeerID *)peerID {
NSLog(@"This IS getting called");
[_browser invitePeer:peerID toSession:_session withContext:nil timeout:30];
}
Я бегу это на двух тренажерах, и он работал в течение некоторого времени, но вдруг остановился. Любые идеи о том, как и где искать проблему?
С какой ОС и версией вы работаете здесь? Я обнаружил, что вы должны сериализовать объекты MCPeerID и повторно использовать их, если имя устройства не изменилось. В противном случае процесс просмотра может быть загрязнен дубликатами. Это работает, если вы запускаете его на реальном оборудовании? – macshome
I _Product/Clean_-ed мой проект и сбрасывает симулятор с помощью _iOS Simulator/Reset Content and Settings ..._, и он снова работает, поэтому я думаю, проблема была в том, что вы упомянули. Не могли бы вы преобразовать его, чтобы ответить, чтобы я мог принять его? –
Я добавил свой ответ. В сеансе, который я связал, есть код для обработки сериализации объектов MCPeerID. Только один совет внес большой вклад в мой код мультиплеера. – macshome