web-dev-qa-db-ja.com

Xcode 8 - IB Designables - 自動レイアウトステータスのレンダリングと更新に失敗し、エージェントがクラッシュしました

私は最近Xcode 8にアップグレードしましたが、ストーリーボードに問題があります。

プロジェクトを開いてストーリーボードを開いていなければ、コンパイルして正常に動作します。ストーリーボードを開くと、以下に示すようにIB Designablesについて複数のエラーが発生します。

enter image description here

これらのビューは、私がCocoapodを使ってインポートしたTextFieldEffectsBEMCheckboxからのカスタムビューを使っている唯一のビューです。

113
Alan

次のいずれかを試して、原因を突き止めることができます。

  1. このディレクトリでIBDesignablesAgentCocoaTouchログを探してください:~/Library/Logs/DiagnosticReportsそして原因を確かめてください。

  2. ストーリーボードで@IBDesignable UIViewを選択しながら、[エディタ] - > [デバッグビューのデバッグ]を選択して、スタックトレースを確認します。

  3. フィールド作成フォルダを削除します。

    Xcode Preference -> Location -> Derived Data
    /Users/YourMacName/Library/Developer/Xcode/DerivedData
    
  4. プロジェクトをきれいにするShift+Command+Alt+K

  5. あなたのプロジェクトをビルドCommand+B

117
Maria

私は次のようにして問題を解決しました:

  1. File > Workspace settingsに行きます。
  2. [派生データ]の横にある小さな右矢印をクリックします。これにより、DerivedDataフォルダの場所でFinderアプリが開きます。
  3. DerivedDataフォルダ内に移動し、プロジェクトに対応するフォルダを削除します。
  4. Xcodeを終了して、もう一度開きます。
  5. プロジェクトをきれいにする shiftcommandk
  6. プロジェクトを構築する commandb
  7. ストーリーボードを開きます。
  8. Editor > Refresh all viewsに行きます。

更新

Editor > Refresh all viewsに直接アクセスするだけでうまくいくこともありました。 Refresh all viewsが無効になっている場合は、Xcodeを終了してやり直してください。

61
mnemonic23

失敗したビューを削除し、command + Zを押して削除を元に戻します。わたしにはできる。

後で失敗したビューを編集すると、エラーが再度発生する可能性があります。上記をもう一度実行してください。

44
Ryan.Yuen

私はCocoaPod 1.5.0でこの問題に直面しました。解決策は、このエラーが表示されたらもう一度Podを再インストールする(Podを再インストール)ことです。そうしないと、代わりにCocoaPod 1.4.0を使用することができます。 1.4.0ではうまくいきます(少なくとも私にとっては)。

更新:

Podfileに次のスクリプトを追加して、1.5.0の問題を解決してください。

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings.delete('CODE_SIGNING_ALLOWED')
    config.build_settings.delete('CODE_SIGNING_REQUIRED')
  end
end

参照: https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911

35
Jerome Li

ストーリーボードで使用されているカスタムビューに使用する可能性があるすべてのxibファイルに対して、[Use Trait Variations]([IDとタイプ]パネル)を無効にします。

8
LatinCoder

私の@IBDesignableクラスに次のコードを追加するとうまくいきます。

override init(frame: CGRect) {
    super.init(frame: frame)
}
8
Zaid Pathan

私の問題は、(このプロジェクトに関連する)フォルダを派生データフォルダから削除することで解決されました。これを行うには、「ファイル」 - >「プロジェクト設定」 - >「deside」の順にクリックします/Users/.../Xcode/DerivedData「DerivedData」フォルダーをクリックします。フォルダーという名前のプロジェクトにそれらが削除されます。あなたのプロジェクトを開いてxcodeを終了し、このステップProduct-> cleanを使ってプロジェクトをきれいにしてからプロジェクトをビルドしてください。Product-> Buildこれらはこの問題を解決するでしょう。

7
Mitu Vinci

ストーリーボードを開いて - >エディタ - >すべてのビューを更新してください。これは私のために働きます。

2

私はこれをデバッグしたときに私はUIを変更しているいくつかのクラスがあることがわかった。通常、marquelabelは、UILabelのサブクラス、または実行時にUIViewをサブクラス化してuiを描画し、Autolayoutエンジンと衝突する他のクラスです。これらのカスタムビューの幅や高さを固定してみてください。それでも問題が解決しない場合、以下の解決策を試してください。 -

解決策1: - ポッドファイル内の#use_frameworksのコメントを外します。

解決策2: - 派生データを削除してみてください

  1. Xcodeのエディタウィンドウを閉じてシミュレータを終了します - >
  2. Xcodeの設定 - >場所 - >に移動します。
  3. 派生データパスを示す小さな灰色の矢印をクリックします - >
  4. プロジェクトを選択してください - >
  5. 中のすべてのフォルダを削除します - >
  6. Xcodeを終了して再度開く
2
Ashish Pisey

私は同じ問題を抱えていて、何が起こったのかを試してみるためにここに来ました。 IBDesignableがログフォルダに存在せず、他のすべてのオプションを既に試しているため、トップランクの回答に気付いたし、回答自体も役に立ちませんでした。

私はUIViewのための私のIBDesignable拡張をコメントアウトすることを試みることに決めました、そしてそれは即座に問題を解決しました。そのため、これを修正するには、問題の原因となっている拡張子を見つけ、IBDesignableクラスを作成し、必要なイニシャライザを次のように指定して、必要な初期値を設定します。

@IBDesignable class RoundedView: UIView {

override init(frame: CGRect) {
    super.init(frame: frame)
    sharedInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    sharedInit()
}

override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    sharedInit()
}

func sharedInit() {
}
}

重要:designableを使用しているアイテムに新しいクラスを追加することを忘れないでください。

1
Nox

私はきれいにしてプロジェクトを実行してもこの問題は解決しません。

しかし、プロジェクトを閉じて再開しました。

1
Lal Krishna

同じエラーに直面しました:UITextFieldをカスタマイズし、インターフェイスビルダーを使用した場合、コンソールのエラーは-CustomFieldクラスの未実装の初期化子 'init(frame :)'の使用でした

エラーを修正するイニシャライザーを追加しました

1
Avinash

私の場合、私はUIViewをサブクラス化したライブラリを使っていました。 IB_DESIGNABLEを使用していて、[super awakeFromNib]への呼び出しがありませんでした。このメソッドへの呼び出しを追加したら、バグは消えました。

それがIB_DESIGNABLEを実装していたという事実がこれに影響を及ぼしたかどうかはわかりません。

0
AnthoPak

上記の複数の解決策を試した後、私は非常にXcodeのみを使用してシステムをシャットダウンし、電源を入れて、それは私のために働いた。

0
Mehsam Saeed

必要な変更を加えたら、ストーリーボードを変更するか、私の場合は.xibを "XCode 7"で開くように変更し、保存して閉じます。これはエラーに対処するための単なるギャップ対策ですが、最終的にはエラーを修正するか、または不可能になるまでこれを実行する必要があります。

0
Alberto Lopez

そのIBDesignablesAgentCocoaTouchファイルを見つけることができないか、エディタから「選択ビューをデバッグ」しようとするとエラーが発生するような人にとっては、これらの「レンダリングに失敗した」エラーをデバッグする別の方法があります。

サイドバーからあなたの現在のMacを選択し(それはたぶんデフォルトで自動選択されるでしょう)、それから "IBSceneUpdate"を検索してEnterを押してください。レンダリングできないIBDesignableに対してXcodeエラーが発生するたびに、エラーに関する詳細が記載された新しい "IBSceneUpdate"エントリも表示されます。少なくとも私のIBDesignableエラーをデバッグすることができた方法ではありません!

enter image description here

0
Stelabouras

カスタムのuiviewにxibファイルを使用している場合これを試して:

から変更する

Bundle.main.loadNibNamed("UserView", owner: self, options: nil)

に:

let bundle = Bundle(for: UserView.self) 
bundle.loadNibNamed("UserView", owner: self, options: nil)
0