2010-05-24 93 views
2

我正在使用POS設備刷卡。它的工作很好。我使用了以下代碼。EAAccessory通知問題

- (id) init 
{ 
self = [super init]; 
if (self != nil) 
{ 
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
EAAccessoryManager *accessoryMamaner = [EAAccessoryManager sharedAccessoryManager]; 

[accessoryMamaner registerForLocalNotifications]; 
[notificationCenter addObserver: self selector: @selector (accessoryDidConnect:) name: EAAccessoryDidConnectNotification object: nil]; 
[notificationCenter addObserver: self selector: @selector (accessoryDidDisconnect:) name: EAAccessoryDidDisconnectNotification object: nil]; 

NSArray *accessories = [accessoryMamaner connectedAccessories]; 
accessory = nil; 

session = nil; 

for (EAAccessory *obj in accessories) 
{ 
if ([[obj protocolStrings] containsObject:@"com.XXXXX"] || [[obj protocolStrings] containsObject:@"com.YYYYYY"]) 
{ 
accessory = obj; 
break; 
} 
} 

if (accessory) 
{ 
session = [[EASession alloc] initWithAccessory:accessory forProtocol:@"com.dailysystems.DS247"]; 
if (!session) session = [[EASession alloc] initWithAccessory:accessory forProtocol:@"com.usaepay.ipos"]; 

if (session) 
{ 
self.deviceConnected = YES; 
[[session inputStream] setDelegate:self]; 
[[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[[session inputStream] open]; 

[[session outputStream] setDelegate:self]; 
[[session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[[session outputStream] open]; 
} 
else 
{ 
UIAlertView *accessoryInfo = [[UIAlertView alloc] initWithTitle:@"Alert!" message:@"Hardware is not connected." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[accessoryInfo show]; [accessoryInfo release]; 
} 
} 
} 
return self; 
} 

當我拔下附件它給了我accessoryDidDisconnect,當我連接它給了我accessoryDidConnect, 但問題是後附件停止工作,它不以響應命令。我試圖釋放alloc並再次分配,但沒有用。 請告訴我,如果有人有任何想法如何再次獲得配件工作。 在此先感謝。

回答

0

我前一段時間遇到類似問題。

首先,我希望你做alloc/init不僅僅是alloc。

其次,您是否將發佈會話並將其設置爲零,以便在accessoryDidDisconnect回調中調用?我遇到了一些舊會話阻礙的問題。

第三,在再次初始化配件之前,我有一點點運氣。

我把設備安裝在另一個函數,稱那是由init:和accessoryDidConnect:

然後我把的NSTimer延遲功能(甚至睡眠()調用將測試做),以防萬一 - 之後我似乎遇到了比以前少很多的問題,所以也許通知即將到來之前設備才能真正準備好重新打開會話?

您的通知回調測試會很棒!