2017-02-16 5 views
-1

xibを使用してビューをロードしていますが、常にクラッシュします。私はネット上で利用可能なさまざまなアプローチを試みたが、それでもクラッシュする。私は対処するための解決策を見つけることはありません。参照用のコードが添付されていますClick hereXIbからのロードビューがクラッシュする

+0

クラッシュメッセージは何ですか? –

+0

EXE_BAD_ACCESSはいつも来る – ankit

答えて

1

あなたのコードを確認しましたが、あなたのビュークラスをファイル所有者に与え、IBOutletsとIBActionsを変更すると問題が発生します。

まず最初に、「CartView」をFileOwnerに与え、それをViewから削除します。

次に、ジェスチャーとIBOutletsからIBActionを削除してからlblとimgを削除し、再度filesownerを参照するように割り当てます。

+0

これはうまくいきました。ありがとう !! – ankit

+0

あなたは歓迎です:) –

1

あなたはそれでビューをロードしても問題は絶対にありません。この

private func loadViewFromNib() -> UIView { 
     let bundle = Bundle(for: type(of: self)) 
     let nib = UINib(nibName: "CartView", bundle: bundle) 
     let nibView = nib.instantiate(withOwner: self, options: nil).first as! UIView 
     return nibView 
    } 

のようなカートをロードしようとしています。問題は、ビューのクラス内でビューを読み込まないでください。

あなたはViewController内でそれを行う必要があります。このように:

func loadCartView() -> UIView! { 
     if let customView = NSBundle.mainBundle().loadNibNamed("CartView", owner: self, options: nil).first as? CartView { 
      customView.translatesAutoresizingMaskIntoConstraints = false 
      return customView 
     } else { 
      return nil 
     } 
    } 

SWIFT3:

func loadCartView() -> UIView! { 
    if let customView = Bundle.main.loadNibNamed("CartView", owner: self, options: nil)?.first as? CartView { 
     customView.translatesAutoresizingMaskIntoConstraints = false 
     return customView 
    } else { 
     return nil 
    } 
    } 
+0

ジェイソン、ファイル所有者にカートクラスを追加するだけで私のために働いていました。それをVIewControllerに追加する必要はありません。 – ankit

+0

あなたのコードを見ました。 viewControllerの外側にあるビューをサブビューとしてロードするのは良い方法ではありません。 @Krishnanunniも同じと言った。 –

1

何をやっているが間違っています。ストーリーボードのxibとビューの両方のカートをクラスとして設定しました。

nibをviewControllerからロードし、サブビューとして追加してみてください。コンテントとしてストーリーボードの小さなビューが必要な場合は、アウトレットを作成し、サブビューとしてカードビューをコンテナに追加するだけです。

+0

これはxibからビューをロードするより適切なアプローチだと思います –

+0

しかし、私はIBDesignableクラスを作りたいと思ったらどうしますか?この方法で私はストーリーボードからサブクラス化する必要があります。 – ankit

+0

私はIBDesignableをxibから設定することはできないと思います。設定した画像はIB – krishnanunni

関連する問題