Monotouch - поток вывода EASession дает нулевую ошибку - PullRequest
1 голос
/ 30 ноября 2011

Нужна помощь здесь.

Когда я запускаю этот код (ниже), он падает, когда я обрабатываю его во второй раз.происходит сбой, если ссылка на объект не установлена ​​.. в session.outputstream

var session= new EASession(accessory, "net.gebe"); 

session.OutputStream.Open();

во второй раз для session.outputstream задано значение null.Даже при проведении сеанса.

Ричард

   public void PrintIt()
    {
     var _accessoryList = EAAccessoryManager.SharedAccessoryManager.ConnectedAccessories;

     accessory = null;

     foreach(var obj in _accessoryList)
     {
      if(obj.ProtocolStrings.Contains("net.gebe"))
      {
       accessory = obj;
       //break;
      }             
     }

     if(accessory == null)
     {          
      //tmg.InfoAlert ("No Printer");
      return;
     }


     var session= new EASession(accessory, "net.gebe"); 

     session.OutputStream.Open();

     string str2 = "HELLO THERE PRINTER 1 2 3 4 5";

     byte[] printdata2;

     ASCIIEncoding   encoding2 = new ASCIIEncoding();

     printdata2 = encoding2.GetBytes(str2); 

     uint nlen2 = Convert.ToUInt32 (str2.Length+1);

     session.OutputStream.Write(printdata2,nlen2 ); 

     session.OutputStream.Close ();

     session.Dispose ();
    }

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Я получил свою работу сейчас. Что я сделал:

  • Сохранить сессию как переменную в классе
  • Создать сессию, только если сессия пуста
  • Возможно, вы не захотите вызывать session.OutputStream.Close () после каждой печати. По крайней мере, это нужно учитывать при отладке для вашей ситуации.

Это позволит выполнять несколько заданий на печать на одной странице без разрыва. session.OutputStream не был нулевым в этом случае.

Я также обнаружил, что события ViewDidLoad / Unload не были хороши для определения, когда устройство становится доступным / недоступным через наблюдателей EAAccessoryDidConnectNotification и EAAccessory DidDisconnectNotification. Вместо этого я использовал ViewDidAppear / ViewDidDisappear. В этих методах я разрушаю сеанс, и когда я возвращаюсь, чтобы напечатать новое задание, сеанс создается и назначается OutputStream.

Наконец, я не получаю события, запущенные для моего устройства через session.OutputStream.OnEvent. Не уверен, что это мое устройство, ошибка MonoTouch или просто моя общая ошибка.

ОБНОВЛЕНИЕ: ознакомьтесь с этой красиво упакованной реализацией AccessoryAdapter

0 голосов
/ 17 июля 2012

Вам необходимо перечислить внешние аксессуары, которые вы собираетесь использовать, в вашем Info.plist.

На сайте Apple есть некоторая документация по этому вопросу: http://developer.apple.com/library/ios/#featuredarticles/ExternalAccessoryPT/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009502

Вот скриншот того, как установить это значение в Info.plist: http://screencast.com/t/AYmOWjf8wkL

(Это отсюда: https://bugzilla.xamarin.com/show_bug.cgi?id=1635#c1)

...