2011-08-29 50 views
0

我正在阅读“开始iPad应用程序开发”,并且在蓝牙章节中,我正在测试与本书中出现的代码完全相同的代码。唯一的区别是这本书是3.2版本,我在iOS 4.0版本中使用XCODE 4。iOS 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]; 
} 
+0

你有任何其他设备和运行你的应用程序? –

回答

1

看起来像你错过了以下的委托方法:

- (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. 
} 

希望这帮助。