2016-08-15 2 views
0

のViewController OS X(スウィフト) - 上NSViewControllerを表すクラッシュしたアプリケーションをクラッシュアプ​​リケーションの却下それはOS Xスウィフト</p> <p>問題についての決定でなければなりません

の2つがありNSViewController持っている - 私は移行を行う際に問題が、それらの間 - エラーで閉じたアプリケーションはNSViewControllerを表します。 presentViewControllerとdismissViewControllerのメソッドを使用します。ここで問題と

例プロジェクト:[email protected]:IgorCova/Freelance.git

(のみヨセミテの)エラーを再現する方法: 1.私は2番目開いた後、私は最初NSViewController 2を開きますNSViewController 3.次に、第二NSViewControllerを開こうとすると、再びその後4 (第2解任)戻って最初に行く - あなたに

答えて

1

をアプリケーション押しつぶす、最終的には(しかし、エルキャピタンに、すべてがエラーなしで動作します) SecondViewControllerのviewDidLoad()は、 "dismisSecondViewController"のオブザーバとして自身を登録します。 tification:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(SecondViewController.dismisSelf), 
                  name:"dismisSecondViewController", 
                 object: nil) 

問題は、それらが割り当て解除を取得する前に前に10.11にあなたが登録解除任意のオブザーバに持っていることである(すなわち、 NSNotificationCenterはこの割り当て解除されたメモリ領域を占有しているものにメッセージを送信し続けます。ガベージまたはこれらのメッセージに応答しない他のオブジェクトのいずれかになります。ビューコントローラは、スイッチを切り替えると明らかに割り当てが解除されるため、これが問題です。

ので修正は簡単です:あなたのSecondViewControllerクラス

deinit { 
    NSNotificationCenter.defaultCenter().removeObserver(self) 
} 
+0

に次のdeinitメソッドを追加しますありがとうございました!それはうまくいく –

関連する問題