在这里寻求帮助。
当我运行此代码(下面)时,它会在我第二次处理它时崩溃。 它在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 ();
}
答案 0 :(得分:1)
我现在正在工作。我做了什么:
这将允许在同一页面上进行多个打印作业而不会爆炸。在这种情况下,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)