EAAccessory Уведомление о проблеме - PullRequest
2 голосов
/ 24 мая 2010

Я использую POS-устройство для считывания карт. это работает хорошо. Я использовал следующие коды.

- (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 и alloc снова, но безрезультатно. Пожалуйста, скажите мне, если у кого-то есть идеи, как заставить аксессуар работать снова. Заранее спасибо.

1 Ответ

0 голосов
/ 05 августа 2011

Недавно у меня была похожая проблема с вами.

Во-первых, я надеюсь, что вы делаете alloc / init, а не просто alloc.

Во-вторых, вы освобождаете сеанс и устанавливаете ноль в обратном вызове accessoryDidDisconnect? У меня были некоторые проблемы, когда мешал старый сеанс.

В-третьих, мне повезло с небольшой задержкой, прежде чем снова инициализировать аксессуар.

Я установил настройки устройства в другую функцию и вызвал ее из init: и accessoryDidConnect:

Затем я поставил NSTimer для задержки функции (или даже вызова sleep () для проверки) на всякий случай - у меня, казалось, было намного меньше проблем после этого, чем раньше, поэтому, возможно, уведомление приходит до того, как устройство действительно готово к открытию сессии?

Было бы здорово проверить ваши обратные вызовы уведомлений!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...