abdulgalimov
@abdulgalimov

Как повторно подключиться к EAAccessory в iOS?

Использую ExternalAccessory framework в iOS. Первое подключение происходит нормально:
session = [[EASession alloc] initWithAccessory:self.accessory
                                   forProtocol:@"com.domain.protocol"];
[[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];


Прочитать данные тоже удалось
[[session inputStream] read:buf2 maxLength:1024];

Проблема в том, что если я закрою подключение:
[[session inputStream] setDelegate:nil];
[[session inputStream] removeFromRunLoop:[NSRunLoop currentRunLoop]
                                 forMode:NSDefaultRunLoopMode];
[[session inputStream] close];
//
[[session outputStream] setDelegate:nil];
[[session outputStream] removeFromRunLoop:[NSRunLoop currentRunLoop]
                                 forMode:NSDefaultRunLoopMode];
[[session outputStream] close];

То после этого при попытке создать новый session получаю ошибку:
ERROR - opening session failed
И объект EASession не создается. Кто знает в чем проблема?
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 1
f0r3s1
@f0r3s1
iOS Developer
Ну я не знаю на сколько правильно я понял что ты написал, но ты:
во-первых, не создаешь, а просто выделяешь память под этот объект и инициализируешь его,
во-вторых, как ты создаешь новый session? Тебе нужно просто открыть поток? Делай просто [[session inputStream] open];
Где вообще повторная попытка "создать новый session"? Если ты просто запускаешь заново весь этот код, то он не заработает, тк заново выделяет память для объекта который уже лежит в памяти. Вынеси
session = [[EASession alloc] initWithAccessory:self.accessory
                                   forProtocol:@"com.domain.protocol"];
[[session inputStream] setDelegate:self];
[[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop]
                                 forMode:NSDefaultRunLoopMode];


за функцию (с outputStream аналогично) и должно заработать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы