Ну я не знаю на сколько правильно я понял что ты написал, но ты:
во-первых, не создаешь, а просто выделяешь память под этот объект и инициализируешь его,
во-вторых, как ты создаешь новый 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 аналогично) и должно заработать