我在我的列表中看不到广告商(多点连接),为啥?

Posted

技术标签:

【中文标题】我在我的列表中看不到广告商(多点连接),为啥?【英文标题】:I can not see advertiser (multipeer connectivity) in my list, why?我在我的列表中看不到广告商(多点连接),为什么? 【发布时间】:2014-05-09 10:59:20 【问题描述】:

我无法在我的列表中看到广告商。我在设备和模拟器上运行这段代码,你知道为什么吗?

这是添加到主视图控制器的所有代码。我正在使用nshipser multipeer connectivity教程:

- (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);

【问题讨论】:

你收到邀请了吗? 【参考方案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 类文档:

重要提示:如果想让浏览器视图控制器管理浏览过程,浏览器对象一定不能主动浏览,并且它的delegate必须为nil。

所以,删除browser.delegate = self 的行删除包含[browser startBrowsingForPeers] 的代码块(而不是传递nil),因为浏览器视图控制器会为您执行此操作。

或者,甚至不直接创建浏览器对象,而是让浏览器视图控制器通过使用其他 init 方法来代替:

MCBrowserViewController *browserViewController = [[MCBrowserViewController alloc] initWithServiceType:XXServiceType session:session];

【讨论】:

我遇到了同样的问题(永远找不到同行)。我添加了对广告商的强烈引用。我已经在使用-[MCBrowserViewController initWithServiceType:session:]。还会发生什么? 哦,算了...我试图在 Mac 上相互发现 iPhone 和模拟器,但只有 iPhone 连接到 WiFi 网络(Mac 在以太网上)!现在似乎工作了。

以上是关于我在我的列表中看不到广告商(多点连接),为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在我的页面中看不到不同的 li 标记?

为啥我在 XCode 项目中看不到我的构建阶段选项卡?

为啥我在 intelliJ logcat 视图中看不到任何错误?

为啥我在vmware设置的主机共享文件夹在虚拟机中看不到?

为啥我在 Power BI 中看不到我的输出数据集?

为啥我在 dbo.sysssislog 表中看不到 onerror 事件