我正在使用Multipeer连接框架制作iOS 7应用程序,但我无法让两台设备相互识别。我查看了文档和wwdc视频,除此之外,该框架的信息非常有限。有没有人有使用新的点对点功能的经验并可以提供帮助?
这基本上是我到目前为止所拥有的。 browserVC显示在屏幕上,但是当我在两台设备上运行应用程序时,找不到任何设备。
MCPeerID *peer = [[MCPeerID alloc] initWithDisplayName:@"user"];
_session = [[MCSession alloc] initWithPeer:peer];
NSString *service = @"nsync";
_session.delegate = self;
MCAdvertiserAssistant *assistant =[[MCAdvertiserAssistant alloc] initWithServiceType:service
discoveryInfo:nil
session:_session];
[assistant start];
MCBrowserViewController *browserVC = [[MCBrowserViewController alloc] initWithServiceType:service
session:_session];
browserVC.delegate = self;
[self presentViewController:browserVC
animated:YES
completion:nil];
答案 0 :(得分:2)
要允许您的浏览器查看设备,您需要使用其他一些广告设备。我认为您的问题是您的MCAdvertiserAssistant超出范围并被取消分配,因为它只存储在本地变量中。
以下是我用来做广告的代码:
#define SERVICE_TYPE @"MyServiceType"
...
@property (nonatomic, strong) MCAdvertiserAssistant* advertiserAssistant;
...
self.peerId = [[MCPeerID alloc] initWithDisplayName:[[UIDevice currentDevice] name]];
self.advertiserSession = [[MCSession alloc] initWithPeer:self.peerId];
self.advertiserSession.delegate = self;
self.advertiserAssistant = [[MCAdvertiserAssistant alloc] initWithServiceType:SERVICE_TYPE discoveryInfo:nil session:self.advertiserSession];
[self.advertiserAssistant start];
请注意,我将广告客户助手存储在属性中,因此只要创建它的方法完成就不会释放它。
并浏览:
self.peerId = [[MCPeerID alloc] initWithDisplayName:[[UIDevice currentDevice] name]];
self.browserSession = [[MCSession alloc] initWithPeer:self.peerId];
self.browserSession.delegate = self;
self.browser = [[MCBrowserViewController alloc] initWithServiceType:SERVICE_TYPE session:self.browserSession];
self.browser.delegate = self;
[self presentViewController:self.browser animated:YES completion:nil];
答案 1 :(得分:1)
不要将MCAdvertiserAssistant *助手声明为局部变量,请声明为类成员。
答案 2 :(得分:0)
我同意。
我昨天试试这个,它就像一个魅力。除了MCAdvertiserAssistant
之外,您的代码似乎是正确的。它应该被设置为全局变量!
正如格雷格所说,你必须在至少连接wifi或蓝牙(不需要互联网连接)的2台设备上运行你的应用程序。请注意,它不适用于蜂窝网络。
答案 3 :(得分:0)
我同意。一种对我有用的语法(至少让他们看到彼此;我仍然无法接受邀请... :):
@property (strong, nonatomic) MCSession *theSession;
@property (strong, nonatomic) MCAdvertiserAssistant *assistant;
@property (strong, nonatomic) MCBrowserViewController *browserVC;
然后,
UIDevice *thisDevice = [UIDevice currentDevice];
MCPeerID *aPeerID = [[ MCPeerID alloc ] initWithDisplayName: thisDevice.name];
self.theSession = [[ MCSession alloc ] initWithPeer: aPeerID ];
self.theSession.delegate = self;
self.assistant = [[MCAdvertiserAssistant alloc] initWithServiceType:kServiceType
discoveryInfo:nil
session:self.theSession ];
self.assistant.delegate = self;
[ self.assistant start ];
和
self.browserVC = [[MCBrowserViewController alloc] initWithServiceType:kServiceType session:self.theSession];
self.browserVC.delegate = self;
[ self.window.rootViewController presentViewController:self.browserVC animated:YES completion:nil];
(必须使用rootViewController
因为我这样做不是在我的主VC中。)