我有一个关于将 currentSession 传递到下一页的问题。我已经在第一个页面视图控制器上测试并成功建立了蓝牙会话。现在我的问题是,我如何将当前会话传递到下一页,因为导航到下一页后,蓝牙连接丢失。因此,在导航到下一页后,当前会话将丢失。这是通过用两部手机发送随机图像来测试的。但是,如果第二次在 nextpageController 上提示蓝牙连接,则可以发送图片。
视图控制器.M:
-(IBAction)btnBluetoothConnect:(id)sender {
    picker = [[GKPeerPickerController alloc] init];
    picker.delegate = self;
    picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
    [picker show];
}
- (void)peerPickerController:(GKPeerPickerController *)pk didConnectPeer:(NSString *)peerID toSession:(GKSession *)session {
    self.currentSession = session;
    session.delegate = self;
    [session setDataReceiveHandler:self withContext:nil];
    picker.delegate = nil;
    [picker dismiss];
}
- (void)peerPickerControllerDidCancel:(GKPeerPickerController *)pk {
    picker.delegate = nil;
}
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state {
    switch (state) {
        case GKPeerStateConnected:
            NSLog(@"connected");
            if (GKPeerStateConnected) {
                self.progress = [[ProgressAlertView alloc] init];
                progress.delegate = self;
                progress.task = @selector(compute);
                [progress start];
            }
            break;
        case GKPeerStateDisconnected:
            NSLog(@"disconnected");
            currentSession = nil;
        default:
            break;
    }
}
-(void)compute{
    [self updateUIWithProgress:0.0 andMessage:@"3"];
    [NSThread sleepForTimeInterval:3];
    if([progress isCancelled]){
        self.progress = nil;
        return;
    }
    [self updateUIWithProgress:0.4 andMessage:@"2"];
    [NSThread sleepForTimeInterval:1];
    if([progress isCancelled]){
        self.progress = nil;
        return;
    }
    [self updateUIWithProgress:0.6 andMessage:@"1"];
    [NSThread sleepForTimeInterval:1];
    if([progress isCancelled]){
        self.progress = nil;
        return;
    }
    [self updateUIWithProgress:0.8 andMessage:@"0"];
    [NSThread sleepForTimeInterval:1];
    if([progress isCancelled]){
        self.progress = nil;
        return;
    }
    else
        [self updateUIWithProgress:1.0 andMessage:@"Start!"];
    NSLog(@"Woohahaha");
    **[self performSegueWithIdentifier:@"next page" sender:self];**
    //process the data here or send a notification for data processing
    //when this method returns, the progress alert view disappears.
}
NextPageController.m:
-(IBAction)btnSend:(id)sender{
    if(currentSession){
        NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:[NSString stringWithFormat:@"4.png"]], .7);
        [self.currentSession sendDataToAllPeers:imageData withDataMode:GKSendDataReliable error:nil];
    }
}
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context{
    imageView.image = [UIImage imageWithData:data];
}
- (void)peerPickerController:(GKPeerPickerController *)pk didConnectPeer:(NSString *)peerID toSession:(GKSession *)session {
    self.currentSession = session;
    session.delegate = self;
    [session setDataReceiveHandler:self withContext:nil];
    picker.delegate = nil;
    [picker dismiss];
}
- (void)peerPickerControllerDidCancel:(GKPeerPickerController *)pk {
    picker.delegate = nil;
}