Iphone 蓝牙会话在发送第一个数据后立即结束

Iphone 蓝牙会话在发送第一个数据后立即结束,iphone,bluetooth,Iphone,Bluetooth,我不明白为什么会发生这种情况,但当我使用蓝牙向连接的对等方发送数据时,他们接收数据的效果非常好,但随后立即断开连接,无法进行进一步的交互。有人能说明为什么会发生这种情况吗?我尝试将超时时间更改为60秒,尝试将发送的数据量减少到500字节以下,但我仍然遇到了这样一种奇怪的情况,即对等方会立即断开彼此的连接。可能是因为我使用GKSession初始化网络,然后使用GKPeerPicker让人们连接到它 这是我的数据发送和接收代码。这主要是暂时的,可能会改变以适应大量数据,但现在我只想建立一个稳定的连接

我不明白为什么会发生这种情况,但当我使用蓝牙向连接的对等方发送数据时,他们接收数据的效果非常好,但随后立即断开连接,无法进行进一步的交互。有人能说明为什么会发生这种情况吗?我尝试将超时时间更改为60秒,尝试将发送的数据量减少到500字节以下,但我仍然遇到了这样一种奇怪的情况,即对等方会立即断开彼此的连接。可能是因为我使用GKSession初始化网络,然后使用GKPeerPicker让人们连接到它

这是我的数据发送和接收代码。这主要是暂时的,可能会改变以适应大量数据,但现在我只想建立一个稳定的连接

-(void)transmitWholeClusterToPeer:(NSString *)peerID{
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *encoder = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

[encoder encodeInt:0 forKey:@"Mode"];
[encoder encodeObject:clusterMap.header forKey:@"Header"];
[encoder finishEncoding];

NSArray *peerList = [[[NSArray alloc] initWithObjects:peerID, nil] copy];

[network sendData:data toPeers:peerList withDataMode:GKSendDataReliable error:nil];
[encoder autorelease];      
[peerList autorelease];
}


}

我不能肯定这是一个明确的答案,但我通过删除GKPeerPicker并实现自己的客户端-服务器设置代码来解决这个问题,该代码本身会生成“保持活动”ping。我认为问题只是我手动设置了一个会话,然后使用对等选择器连接到它。似乎对等选择器只有在连接到其他对等选择器时才稳定且有用。

1。如果要自动释放,请立即执行[[[Foo alloc]init…]autorelease]。在函数的末尾没有自动释放的意义。2.[[[NSArray alloc]init…]copy]leaks.Hm,奇怪的是,我看过几个教程,它们都把自动释放放在代码块的末尾。我认为这很可能是一个选择的问题。毕竟,自动释放只是一种告诉语言在使用完某件东西后可以处理它的方式。当然,如果在开始或结束时执行,只要在数据仍然有效的位置执行,就没有什么区别了?
-(void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session
       context:(void *)context{
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
int mode = [decoder decodeIntForKey:@"Mode"];

switch (mode) {
    case 0:
        clusterMap.header = [decoder decodeObjectForKey:@"Header"];
        break;
    default:
        break;
}