2016-03-31 12 views
0

UITableViewsの2つのSwift(2.2)iOSアプリ(私の最初のもの)があります。ビューの1つは、プログラムの存続期間中に追加/削除される支払いを一覧表示します。Swift iOS、UITableViewなし

これはすべて99%の時間で正常に動作しますが、が数回発生しました。突然すべてがUITableViewになりません。

IBOutletは、正しく接続されている必要があります。まったく機能しません。

IBOutlet変数にどこにでも(単にメソッドを呼び出す)割り当てられていないときに、この原因が考えられますか?

か(私は原因を見つけることができない場合)、最高取り扱い上のアドバイスそれが起こる(私はそれを再作成する必要がある場合、どのようなautolayouteventsoutletsについて、など?)

@IBOutlet weak var paymentTableView: UITableView! 


func handlePayment(payment: PaymentRecord) -> Void { 
    let existingPaymentIndex = payments.indexOf({ $0.payNo == payment.payNo }) 

    if (existingPaymentIndex != nil) { 
     payments.removeAtIndex(existingPaymentIndex!) 
    } 

    if (self.paymentTableView == nil) { // Here is where I notice the issue 
     Log.error?.message("handlePayment: paymentTableView is nil!!") 
     return 
    } 

    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.paymentTableView.reloadData() 
    }) 
} 
+0

理由を説明するのを邪魔することなくダウン投票している人を愛しているのです... –

+0

私はダウン投票しませんでしたが、それはあなたがスタックトレースを提供していないか、または 'handlePayment 'が呼び出されます。表示されたコードセグメントは、nilをチェックし、おそらくエラーを記録する場所を示しますが、 'paymentTableView'は弱いので、基になるテーブルビューが解放されると、いつでもゼロになることがあります。ブレークポイントを設定し、tableviewがnilであるときに 'handlePayment'がどこから呼び出されたかを決定し、ビューコントローラへの参照を取得した方法とtableviewがnilでない理由を調べます。ビューコントローラはちょうど割り当てられただけでしたか、それとも単に削除されましたか? – Paulw11

+0

@paulw handlePaymentは、Webサービスコール(iPadはWebサーバーを実行します)を介してPOSステーションから呼び出されます。それは多くと呼ばれ、それは時間の99%を働いています。私はデバッガを接続して再現できませんでしたが、展開されたバージョンで数回発生しました。 View Controllerへの参照ですか?このメソッドはView Controller上にあり、発生したときにはアクティブView Controllerです。これは唯一のアプリです。何が原因でテーブルビューが解放されるのですか? –

答えて

0

何起こっているのは、ビューが破棄されたときにテーブルビューがメモリからアンロードされているということです。非同期タスクが完了している可能性があります。通常、ネットワークコールの作成から、ビューが破棄された後にこの関数を呼び出して呼び出します。これは、ビューがネットワークリソースをロードしようとしていて、ネットワークコールの完了ハンドラが呼び出される前に別のビューに切り替えることができるときに何度も起こることがわかりました。

関連する問題