gpt4 book ai didi

iphone - 通过浏览下一页的 iOS 蓝牙连接

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:47 24 4
gpt4 key购买 nike

我有一个关于将 currentSession 传递到下一页的问题。我已经在第一个页面 View Controller 上测试并成功建立了蓝牙 session 。现在我的问题是,如何将当前 session 传递到下一页,因为导航到下一页后,蓝牙连接丢失。所以在导航到下一页后,当前 session 就丢失了。这是通过用两部手机发送随机图像来测试的。但是,如果第二次在nextpageController提示蓝牙连接,则可以发送图片。

查看 Controller .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;
}

最佳答案

我不知道我的做法是否正确,但我有一个包含很多页面的应用程序,我需要在所有页面中保持这种联系。所以我把我所有的蓝牙连接代码放在一个单例类中,每个 View Controller 都可以与之通信。这样它就可以处理所有的通信,每个页面都可以告诉它它想要发送什么。

所以这是一个很棒的单例类教程 http://www.galloway.me.uk/tutorials/singleton-classes/

就蓝牙方面的问题而言,您似乎拥有所有正确的方法。只需将它们放在您的单例类中即可。然后,当您引用类时 *(MyManager sharedManager = [MyManager sharedManager];) 然后只需创建一个 sendCommand 方法来发送您想要的任何通信,就像这样 [sharedManager sendCommand:data];

所以你有你的蓝牙类。您添加一个蓝牙连接方法,其中包含类似此代码的内容

picker = [[GKPeerPickerController alloc] init];
picker.delegate = self;
picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
[picker show];

然后从您的 View Controller 类中引用您的单例类,就像教程中显示的那样。

MyManager sharedManager = [MyManager sharedManager];

然后你可以调用你的新方法:[sharedManager bluetoothconnect];

关于iphone - 通过浏览下一页的 iOS 蓝牙连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com