2011-11-30 4 views
1

여기에서 도움이 필요합니다.Monotouch - EASession 출력 스트림에서 null 오류가 발생합니다.

이 코드를 실행할 때 (아래)이 코드를 두 번째로 처리하면 충돌이 발생합니다. 는 session.outputstream

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

session.OutputStream.Open(); 

에 .. 설정되지 오브젝트 참조와 충돌하는 제 2 시간 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(); 
    } 

답변

1

난 내 지금 일하고 있어요. 내가 무슨 짓을 :

  • 세션이
  • 당신은 모든 인쇄 후 session.OutputStream.Close()를 호출 할 수 없습니다 null의 경우
  • 만 세션을 만들 클래스의 변수로 세션을 저장합니다. 최소한 여러분의 상황을 디버깅하는 동안 명심해야 할 것이 있습니다.

이렇게하면 같은 페이지에 여러 장의 인쇄 작업을 할 수 있습니다. 이 경우에는 session.OutputStream이 null이 아닙니다.

또한 ViewDidLoad/Unload 이벤트는 장치가 EAAccessoryDidConnectNotification 및 EAAccessory DidDisconnectNotification 옵저버를 통해 사용 가능/사용 불가능하게 될 때 감지하기에 좋지 않음을 발견했습니다. 대신 ViewDidAppear/ViewDidDisappear를 사용했습니다. 이러한 방법으로 세션을 종료하고 새로운 작업을 인쇄하기 위해 다시 들어가면 세션이 만들어지고 OutputStream이 할당됩니다.

마지막으로 session.OutputStream.OnEvent를 통해 내 장치에 대해 이벤트가 발생하지 않았습니다. 내 장치, MonoTouch 버그 또는 제 일반적인 버그 일지 확실하지 않습니다.

UPDATE : 당신은 당신이 당신의 Info.plist에 사용하려고하고있는 외부 액세서리를 나열 할 필요가 AccessoryAdapter

+0

확인해 보겠습니다. –

관련 문제