Monotouch - EASession输出流给出null错误

时间:2011-11-30 12:52:05

标签: printing xamarin.ios outputstream

在这里寻求帮助。

当我运行此代码(下面)时,它会在我第二次处理它时崩溃。 它在session.outputstream

上崩溃,没有设置对象引用
var session= new EASession(accessory, "net.gebe"); 

session.OutputStream.Open();

第二次session.outputstream为空。即使在处理会话时也是如此。

理查德

   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 个答案:

答案 0 :(得分:1)

我现在正在工作。我做了什么:

  • 将会话保存为类
  • 中的变量
  • 仅在会话为空时创建会话
  • 您可能不希望在每次打印后调用session.OutputStream.Close()。至少在调试情况时要记住这一点。

这将允许在同一页面上进行多个打印作业而不会爆炸。在这种情况下,session.OutputStream不为null。

我还发现ViewDidLoad / Unload事件不适合通过EAAccessoryDidConnectNotification和EAAccessory DidDisconnectNotification观察器检测设备何时可用/不可用。相反,我使用了ViewDidAppear / ViewDidDisappear。在这些方法中,我拆除了会话,当我回来打印新作业时,会话被创建并分配OutputStream。

最后,我没有通过session.OutputStream.OnEvent为我的设备触发事件。不确定它是我的设备,MonoTouch错误,还是我的一般错误。

更新:查看AccessoryAdapter

这个精心包装的实现

答案 1 :(得分:0)

您需要列出您将在Info.plist中使用的外部配件。

苹果网站上有一些关于此的文档: 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