Я пытаюсь найти follow the WWDC talk, чтобы узнать о структуре MultipeerConnectivity. После многих ложных запусков браузер (ы) показывает сверстников, а приглашения выдаются.Multipeer Connectivity: получение приглашения (с использованием встроенного браузера VC)
Но когда я нажимаю «Принять» на одноранговом устройстве, браузер продолжает показывать «Соединение» без конца. Я думал, что MCBrowserViewController
позаботился о логике, и я мог расслабиться, пока пользователь браузера не нажал «Отмена» или «Готово», и метод делегата выстрелил. Держу пари, это нечто очевидное, но это ускользает от меня.
Вот что я надеюсь, это соответствующий код. У меня это в AppDelegate. Операторы NSLog в различных методах делегатов вызываются, как я ожидал, кроме, конечно, в browserViewControllerDidFinish:
.
Имейте в виду, что браузер и приглашения действительно появляются, поэтому что-то прав!
В @interface ...
@property (strong, nonatomic) MCSession *theSession;
@property (strong, nonatomic) MCAdvertiserAssistant *assistant;
@property (strong, nonatomic) MCBrowserViewController *browserVC;
В @implementation
static NSString* const kServiceType = @"eeps-multi";
// called from viewDidAppear in the main ViewController
-(void) startSession
{
if (!self.theSession) {
UIDevice *thisDevice = [UIDevice currentDevice];
MCPeerID *aPeerID = [[ MCPeerID alloc ] initWithDisplayName: thisDevice.name];
self.theSession = [[ MCSession alloc ] initWithPeer: aPeerID ];
self.theSession.delegate = self;
} else {
NSLog(@"Session init skipped -- already exists");
}
}
// called from viewDidAppear in the main ViewController
- (void) startAdvertising
{
if (!self.assistant) {
self.assistant = [[MCAdvertiserAssistant alloc] initWithServiceType:kServiceType
discoveryInfo:nil
session:self.theSession ];
self.assistant.delegate = self;
[ self.assistant start ];
} else {
NSLog(@"Advertiser init skipped -- already exists");
}
}
// called from the main ViewController in response to a button press
- (void) startBrowsing
{
if (!self.browserVC){
self.browserVC = [[MCBrowserViewController alloc] initWithServiceType:kServiceType
session:self.theSession];
self.browserVC.delegate = self;
} else {
NSLog(@"Browser VC init skipped -- already exists");
}
[ self.window.rootViewController presentViewController:self.browserVC animated:YES completion:nil];
}
Заранее спасибо!
Большое вам спасибо, это спасло меня от часов отладки. Я просто бросил все методы делегата там, чтобы реализовать их позже, и даже не знал о didReceiveCertificate. – cargath