簡體   English   中英

接受邀請多重連接

[英]Accepting invitation multipeer connectivity

我希望我沒有通過發布這個問題來違反NDA。

我正在使用新的多路連接,使用藍牙將一些文件發送到附近的設備。 我已設法發送邀請,但我似乎沒有得到如何顯示UIAlertView,用戶可以接受或拒絕邀請。 現在,當用戶發送時,文件會自動保存,並且沒有接受/拒絕警​​報。

代碼是:

- (void) advertiser:(MCNearbyServiceAdvertiser *)advertiser
didReceiveInvitationFromPeer:(MCPeerID *)peerID
               withContext:(NSData *)context
         invitationHandler:(void(^)(BOOL accept,
                                    MCSession *session))invitationHandler{
... save the data context

但有警報:

- (void) advertiser:(MCNearbyServiceAdvertiser *)advertiser
didReceiveInvitationFromPeer:(MCPeerID *)peerID
                withContext:(NSData *)context
         invitationHandler:(void(^)(BOOL accept,
                                    MCSession *session))invitationHandler{


DevicePeer = [MCPeerID alloc];
DevicePeer = peerID;
ArrayInvitationHandler = [NSArray arrayWithObject:[invitationHandler copy]];

// ask the user
UIAlertView *alertView = [[UIAlertView alloc]
                          initWithTitle:@""
                          message:@""
                          delegate:self
                          cancelButtonTitle:@"NO"
                          otherButtonTitles:@"YES", nil];
[alertView show];
 alertView.tag = 2;
}

和警報視圖方法:

 - (void) alertView:(UIAlertView *)alertView
 clickedButtonAtIndex:(NSInteger)buttonIndex
{  
    // retrieve the invitationHandler
    // get user decision
    BOOL accept = (buttonIndex != alertView.cancelButtonIndex) ? YES : NO;
    // respond
    MCSession *session = [ArrayInvitationHandler objectAtIndex:0];

    void (^invitationHandler)(BOOL, MCSession *) = [ArrayInvitationHandler objectAtIndex:0];

    invitationHandler(accept, session);
}

當用戶按YES時,應用程序崩潰,我收到錯誤:

[__NSMallocBlock__ nearbyConnectionDataForPeer:withCompletionHandler:]: unrecognized selector sent to instance 0x14d4e3b0'

我已經查看了IOS開發人員庫,除此之外沒有其他方法

- (void)nearbyConnectionDataForPeer:(id)arg1 withCompletionHandler:(id)arg2{

}

這沒用。 沒有關於IOS開發人員論壇的信息。 有任何想法嗎?

亞歷山德羅是對的,這在WWDC 2013視頻中沒有解釋。 我自己也在努力。

我認為你走在正確的軌道上,你只有幾個邏輯錯誤。 我不明白這兩行:

MCSession *session = [ArrayInvitationHandler objectAtIndex:0];
void (^invitationHandler)(BOOL, MCSession *) = [ArrayInvitationHandler objectAtIndex:0];

存儲在數組中的對象只是您的處理程序。 你遇到崩潰的原因是瀏覽器看到accept是真的並且試圖將對等體連接到會話,但是你給它的會話是nil。 要解決此問題,您需要傳回您創建的新會話。

起初我對瀏覽器端已經創建了一個新會話的概念感到困惑,但后來我意識到我們沒有從瀏覽器那里得到那個會話,我們無法真正傳回去進入邀請處理程序,如果它不存在!

所以,是的,改為:

BOOL accept = (buttonIndex != alertView.cancelButtonIndex) ? YES : NO;

// respond 
MCSession *session;
if(accept) {
   session = [[MCSession alloc] initWithPeer:peer];
   session.delegate = self;
}

void (^invitationHandler)(BOOL, MCSession *) = [ArrayInvitationHandler objectAtIndex:0];
invitationHandler(accept, session);

我建議您在Apple開發人員中心觀看附近網絡與Multipeer Connectivity WWDC 2013視頻。 有一個關於這個東西的例子,這是很好的解釋。

PS:是的你打破了NDA(9月14日),但現在可以了:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM