Я не вижу рекламодателя (многоканальное подключение) в своем списке, почему?

Я не мог видеть рекламодателя в моем списке. Я запускаю этот код на устройстве и симуляторе, знаете почему?

введите здесь описание изображения

Вот весь код, добавленный в основной контроллер представления. Я использую руководство по многоранговому подключению nshipser:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    static NSString * const XXServiceType = @"xx-service";
    localPeerID = [[MCPeerID alloc] initWithDisplayName:[[UIDevice currentDevice] name]];

    MCNearbyServiceAdvertiser *advertiser =
    [[MCNearbyServiceAdvertiser alloc] initWithPeer:localPeerID
                                      discoveryInfo:nil
                                        serviceType:XXServiceType];
    advertiser.delegate = self;
    [advertiser startAdvertisingPeer];

    MCSession *session = [[MCSession alloc] initWithPeer:localPeerID
                                        securityIdentity:nil
                                    encryptionPreference:MCEncryptionNone];
    session.delegate = self;

    MCNearbyServiceBrowser *browser = [[MCNearbyServiceBrowser alloc] initWithPeer:localPeerID serviceType:XXServiceType];
    browser.delegate = self;

    MCBrowserViewController *browserViewController =
    [[MCBrowserViewController alloc] initWithBrowser:browser
                                             session:session];
    browserViewController.view.backgroundColor = [UIColor redColor];
    browserViewController.delegate = self;

    self.modalPresentationStyle = UIModalPresentationFullScreen;

    [self presentViewController:browserViewController animated:YES completion:
     ^{
         [browser startBrowsingForPeers];
     }];
}

- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void(^)(BOOL accept, MCSession *session))invitationHandler
{
    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"didReceiveInvitationFromPeer get called" message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
    [av show];

    if ([self.mutableBlockedPeers containsObject:peerID]) {
        invitationHandler(NO, nil);
        return;
    }

    [self.mutableBlockedPeers addObject:peerID];


    MCSession *session = [[MCSession alloc] initWithPeer:localPeerID
                                        securityIdentity:nil
                                    encryptionPreference:MCEncryptionNone];
    session.delegate = self;

    invitationHandler(YES, session);
}

person János    schedule 09.05.2014    source источник
comment
Вы получаете приглашения?   -  person ChrisH    schedule 14.05.2014


Ответы (1)


У вас есть две основные проблемы с кодом.

Во-первых, у вас нет сильных ссылок на вашего рекламодателя, поэтому, как только viewDidAppear завершится, он будет освобожден (и, таким образом, реклама прекратится).

Итак, убедитесь, что вы добавили свойство в свой контроллер представления и сохранили в нем рекламодателя:

@interface ViewController()<MCNearbyServiceAdvertiserDelegate, etc>
@property(nonatomic, strong) MCNearbyServiceAdvertiser *advertiser;
@end

...

- (void)viewDidAppear:(BOOL)animated {
    ... create the advertiser, etc
    self.advertiser = advertiser
    ... etc
}

Вторая проблема возникает из-за вашего создания и использования объекта браузера.

Из документации Apple класса MCBrowserViewController:

Важно: если вы хотите, чтобы контроллер представления браузера управлял процессом просмотра, объект браузера не должен активно просматривать, а его делегат должен быть нулевым.

Итак, удалите строку, которая говорит browser.delegate = self а также удалите блок кода, содержащий [browser startBrowsingForPeers] (вместо этого укажите nil), так как контроллер представления браузера сделает это за вас.

В качестве альтернативы, даже не создавайте объект браузера напрямую, а вместо этого позвольте контроллеру представления браузера сделать это, используя другой метод инициализации:

MCBrowserViewController *browserViewController = [[MCBrowserViewController alloc] initWithServiceType:XXServiceType session:session];
person Gabriel    schedule 21.05.2014
comment
У меня такая же проблема (одноранговые узлы никогда не находят). Я добавил сильную ссылку на рекламодателя. Я уже использовал -[MCBrowserViewController initWithServiceType:session:]. Что еще может происходить? - person Nicolas Miari; 18.06.2014
comment
О, забудьте... Я пытался взаимно обнаружить iPhone и симулятор на Mac, но только iPhone был подключен к сети Wi-Fi (Mac был на Ethernet)!! Теперь вроде работает. - person Nicolas Miari; 18.06.2014