2013-07-31 2 views
2

Я создаю приложение iOS 7 с инфраструктурой подключения Multipeer, но я не могу заставить два устройства распознавать друг друга. Я просмотрел документацию и видео wwdc, и информация об этой структуре также очень ограничена. Кто-нибудь имеет опыт работы с новой возможностью однорангового взаимодействия и может помочь?iOS 7 Multipeer Connectivity

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

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]; 
+1

Этот вопрос не может реа Ответьте, пожалуйста, как есть, вы можете задать вопрос более конкретным или задать вопрос на другом форуме, например, в чате с чатом или в IRC. –

+0

И форумы разработчиков Apple снова - так что вы должны попробовать и там. – Abizern

+0

Хорошо, спасибо. Я до сих пор не могу получить доступ к форумам разработчиков, но я предполагаю, что скоро смогу. –

ответ

1

не объявлять MCAdvertiserAssistant * помощник как локальную переменную, объявлять как член класса.

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]; 
0

Я согласен.

Я просто попробовал это вчера, он работает как шарм. Ваш код кажется правильным, за исключением вашего MCAdvertiserAssistant. Он должен быть установлен как глобальная переменная!

И, как сказал Грег, вам нужно запустить приложение на двух устройствах, которые связаны хотя бы с Wi-Fi или Bluetooth (не требуется подключение к Интернету). Имейте в виду, что он не будет работать с сотовой сетью.

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, потому что я делал это не в моей основной ВК.)

 Смежные вопросы

  • Нет связанных вопросов^_^