nibからビューをインスタンス化するとエラーが発生する 質問する

nibからビューをインスタンス化するとエラーが発生する 質問する

私はこれに従って@IBDesignable UIViewのサブクラスを作成しようとしました(リンク) チュートリアル。最初のカスタム ビューは問題なく動作します。しかし、別のカスタム ビューを作成しようとすると、エラーが発生します。最初はfailed to update auto layout status: the agent crashedと が表示されましたFailed to render instance of ...。これらのエラーが発生しても、なんとかプロジェクトをビルドして実行できるようになりましたが、その後、新しいエラー ( EXC_BAD_ACCESS ...on line ) が表示されますlet view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView。全体の手順は次のとおりです。

func loadViewFromNib() -> UIView {
        
        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: "advancedCellView", bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
        
        return view
    }

最初のカスタム UIView では問題はありません。同じコードを使用します。

ここに画像の説明を入力してください

何かアイデアはありますか? ありがとうございます

ベストアンサー1

投稿した方法loadViewFromNib()は問題なさそうです。バンドルを正しく取得し、ペン先名を文字列リテラルとして指定しているので、ペン先が見つかるはずです。他の誰かがコメントしたように、代わりにペン先の設定に問題がある可能性があります。確認すべき点がいくつかあります。

  1. AdvancedCellViewアイデンティティ インスペクターでファイルの所有者カスタム クラスとして設定する必要があります。
  2. モジュールが正しいことも確認してください。通常は空白のままにしておきます。
  3. ビューのカスタム クラスは設定しないでください。デフォルト (UIView) のままにしておきます。サイドバーに「View」よりもわかりやすい名前が付いている場合は、おそらく間違っています。
  4. ニブにトップレベルのオブジェクトが 1 つだけあることを確認します。ビュー ツリーを折りたたむと、サイドバーは他のエントリなしで次のようになります。

最上位ビューが 1 つだけの Nib 階層

注意: この回答は、OP がリンクしたチュートリアルに関連しており、ペン先をセットアップする唯一の正しい方法ではありません。

おすすめ記事