iphone - iOS 4 蓝牙发现不起作用

标签 iphone ios ios4 bluetooth

我正在阅读“开始 iPad 应用程序开发”,在蓝牙章节中,我正在测试书中显示的代码。唯一的区别是这本书是针对 3.2 的,而我使用的是 iOS >4.0 的 XCODE 4。

XCODE 不会抛出任何错误或警告,它可以正确构建,但在 iPhone 上测试时它不会发现其他设备。

怎么了?

viewController.h 看起来像:

#import <UIKit/UIKit.h>
#import <GameKit/GameKit.h>

@interface pruebaBluetoothViewController : UIViewController
<GKSessionDelegate, GKPeerPickerControllerDelegate> {
GKSession *currentSession;
IBOutlet UITextField *txtMessage;
IBOutlet UIButton *connect;
IBOutlet UIButton *disconnect;
GKPeerPickerController *picker;
}
@property (nonatomic, retain) GKSession *currentSession;
@property (nonatomic, retain) UITextField *txtMessage;
@property (nonatomic, retain) UIButton *connect;
@property (nonatomic, retain) UIButton *disconnect;
-(IBAction) btnSend:(id) sender;
-(IBAction) btnConnect:(id) sender;
-(IBAction) btnDisconnect:(id) sender;
@end

虽然 .m 看起来像:

#import "pruebaBluetoothViewController.h"

@implementation pruebaBluetoothViewController

@synthesize currentSession;
@synthesize txtMessage;
@synthesize connect;
@synthesize disconnect;

- (void)viewDidLoad {
[connect setHidden:NO];
[disconnect setHidden:YES];
[super viewDidLoad];
}
-(IBAction) btnConnect:(id) sender {
picker = [[GKPeerPickerController alloc] init];
picker.delegate = self;
picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
[connect setHidden:YES];
[disconnect setHidden:NO];
[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];
[picker autorelease];
}
- (void)peerPickerControllerDidCancel:(GKPeerPickerController *)pk {
picker.delegate = nil;
[picker autorelease];
[connect setHidden:NO];
[disconnect setHidden:YES];
}
-(IBAction) btnDisconnect:(id) sender {
[self.currentSession disconnectFromAllPeers];
[self.currentSession release];
currentSession = nil;
[connect setHidden:NO];
[disconnect setHidden:YES];
}
- (void)session:(GKSession *)session
peer:(NSString *)peerID
didChangeState:(GKPeerConnectionState)state {
switch (state) {
case GKPeerStateConnected:
NSLog(@"connected");
break;
case GKPeerStateDisconnected:
NSLog(@"disconnected");
[self.currentSession release];
currentSession = nil;
[connect setHidden:NO];
[disconnect setHidden:YES];
break;
}
}
- (void)dealloc {
[txtMessage release];
[currentSession release];
[super dealloc];
}

- (void) mySendDataToPeers:(NSData *) data {
if (currentSession)
[self.currentSession sendDataToAllPeers:data
withDataMode:GKSendDataReliable
error:nil];
}
-(IBAction) btnSend:(id) sender {
//---convert an NSString object to NSData---
NSData* data;
NSString *str = [NSString stringWithString:txtMessage.text];
data = [str dataUsingEncoding: NSASCIIStringEncoding];
[self mySendDataToPeers:data];
}
- (void) receiveData:(NSData *)data
fromPeer:(NSString *)peer
inSession:(GKSession *)session
context:(void *)context {
//---convert the NSData to NSString---
NSString* str;
str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Data received"
message:str
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}

最佳答案

看起来您错过了以下委托(delegate)方法:

- (GKSession *)peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type { 
    GKSession *session = [[GKSession alloc] initWithSessionID:kTankSessionID displayName:nil sessionMode:GKSessionModePeer]; 
    return [session autorelease]; // peer picker retains a reference, so autorelease ours so we don't leak.
}

希望这有帮助。

关于iphone - iOS 4 蓝牙发现不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7229718/

相关文章:

iphone - 如何检测 UIStatusBar 的隐藏和显示?

ios - 有没有办法检测 2 个 SKSpriteNode 之间的碰撞但允许它们重叠

iphone - 如何在我的应用程序中实现网络错误警报?

iPhone SDK : How can I write an audio file picked from iPod Library into my app's Documents Folder?

ios - ALAssetsLibrary,等到assetForURL 完成

iphone - 检测 iPhone/iPod 颜色

iphone - 如何查看在iphone应用程序中运行的sqlite文件中的数据?

ios - 如何在外部触摸屏显示器上运行 Apple tvOS 或 IOS 应用程序

iphone - 在 iOS 应用程序包文件中进行全文搜索

iphone - iOS 4 上隐藏的 CATransition 动画(相机虹膜动画)