2016-04-06 21 views
1

OS Xアプリケーション用の印刷可能な矩形を取得しようとしています。セッションの作成、ページフォーマットの確認、フォーマットの検証などが行われます。コードはコンパイルされますが、PMCreateSessionから-50のステータスが取得されます。 printSessionが正しくないと宣言していますか?通常、UnsafeMutablePointersでそれほど多くのことを処理する必要はありません。PMCreateSessionが印刷セッションを作成していません

ありがとうございます!

let printSession: UnsafeMutablePointer<PMPrintSession> = nil 
    let pmPageFormat: UnsafeMutablePointer<PMPageFormat> = nil 
    var status = PMCreateSession(printSession) 
    status = PMCreatePageFormat(pmPageFormat) 
    status = PMSessionDefaultPageFormat(printSession.memory, pmPageFormat.memory) 
    let changed: UnsafeMutablePointer<DarwinBoolean> = nil 
    status = PMSessionValidatePageFormat(printSession.memory, pmPageFormat.memory, changed) 
    changed.destroy() 
    var pRect = PMRect() 
    status = PMGetAdjustedPageRect(pmPageFormat.memory, &pRect) 

    Swift.print("pRect \(pRect)") 

    status = PMRelease(pmPageFormat) 
    status = PMRelease(printSession) 
+0

ポインタを割り当てるときに効果的です。たとえば、let printSession = UnsafeMutablePointer .alloc(1)printSession、pmPageFormat、およびchangedが宣言され、そのように割り当てられ、実際には合理的なrect(0、0、734、576)が得られます。しかし、まだPMReleaseの呼び出しでクラッシュして、なぜそのことがわかりません。 – JKaz

+0

今のところ、PMRelease(printSession)(および他のPMRelease)をprintSession.destroy()およびprintSession.dealloc(1)に置き換えてください。明白な有害な影響はありませんが、それが正しいことなのか、なぜPMReleaseがクラッシュするのかは不明です。 – JKaz

答えて

0

アムは、私が不適切printSessionを宣言しますか?次のように

一つはPMPrintSessionを獲得することができます:

// create a C Null pointer of type PMPrintSession 
let printSession = unsafeBitCast(0, to: PMPrintSession.self) 
// pass by & converts PMPrintSession to UnsafeMutablePointer<PMPrintSession> 
PMCreateSession(&printSession) 
… 
// recast printSession to release memory 
PMRelease(PMObject(printSession)) 

代わりに、PMPrintSessionはココアNSPrintInfoからアクセスすることができます。

let printInfo = NSPrintInfo.shared() 
let printSession = PMPrintSession(printInfo.pmPrintSession()) 
通常

はとても対処する必要はありません。 UnsafeMutablePointersで多くのもの

についてUnsafeMutablePointerの使用方法の詳細は、GitHubの上004.42Apple_CorePrintingExample参照スウィフト有するコア印刷を使用しての完全な例についてのStackOverflow "How to use UnsafeMutablePointer in Swift?"

参照。

+0

お返事ありがとうございます。私は時間の許可(一年前は生涯のように思える!)と提案を検証し、私がそうした場合、あるいはこれが正しいアプローチであるという他のコメントを確認しようとすると、このコードに戻ります。それを無視したり、受け入れを躊躇したりすることはありません。現時点では他のものとの締め切りになっています。ありがとうございました。 – JKaz

関連する問題