私は最近Xcode 8にアップグレードしましたが、ストーリーボードに問題があります。
プロジェクトを開いてストーリーボードを開いていなければ、コンパイルして正常に動作します。ストーリーボードを開くと、以下に示すようにIB Designablesについて複数のエラーが発生します。
これらのビューは、私がCocoapodを使ってインポートしたTextFieldEffects
とBEMCheckbox
からのカスタムビューを使っている唯一のビューです。
次のいずれかを試して、原因を突き止めることができます。
このディレクトリでIBDesignablesAgentCocoaTouch
ログを探してください:~/Library/Logs/DiagnosticReports
そして原因を確かめてください。
ストーリーボードで@IBDesignable UIView
を選択しながら、[エディタ] - > [デバッグビューのデバッグ]を選択して、スタックトレースを確認します。
フィールド作成フォルダを削除します。
Xcode Preference -> Location -> Derived Data
/Users/YourMacName/Library/Developer/Xcode/DerivedData
プロジェクトをきれいにするShift
+Command
+Alt
+K
。
あなたのプロジェクトをビルドCommand
+B
。
私は次のようにして問題を解決しました:
File > Workspace settings
に行きます。DerivedData
フォルダの場所でFinderアプリが開きます。DerivedData
フォルダ内に移動し、プロジェクトに対応するフォルダを削除します。Editor > Refresh all views
に行きます。更新
Editor > Refresh all views
に直接アクセスするだけでうまくいくこともありました。 Refresh all views
が無効になっている場合は、Xcodeを終了してやり直してください。
失敗したビューを削除し、command + Zを押して削除を元に戻します。わたしにはできる。
後で失敗したビューを編集すると、エラーが再度発生する可能性があります。上記をもう一度実行してください。
私は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
ストーリーボードで使用されているカスタムビューに使用する可能性があるすべてのxibファイルに対して、[Use Trait Variations]([IDとタイプ]パネル)を無効にします。
私の@IBDesignable
クラスに次のコードを追加するとうまくいきます。
override init(frame: CGRect) {
super.init(frame: frame)
}
私の問題は、(このプロジェクトに関連する)フォルダを派生データフォルダから削除することで解決されました。これを行うには、「ファイル」 - >「プロジェクト設定」 - >「deside」の順にクリックします/Users/.../Xcode/DerivedData「DerivedData」フォルダーをクリックします。フォルダーという名前のプロジェクトにそれらが削除されます。あなたのプロジェクトを開いてxcodeを終了し、このステップProduct-> cleanを使ってプロジェクトをきれいにしてからプロジェクトをビルドしてください。Product-> Buildこれらはこの問題を解決するでしょう。
ストーリーボードを開いて - >エディタ - >すべてのビューを更新してください。これは私のために働きます。
私はこれをデバッグしたときに私はUIを変更しているいくつかのクラスがあることがわかった。通常、marquelabelは、UILabelのサブクラス、または実行時にUIViewをサブクラス化してuiを描画し、Autolayoutエンジンと衝突する他のクラスです。これらのカスタムビューの幅や高さを固定してみてください。それでも問題が解決しない場合、以下の解決策を試してください。 -
解決策1: - ポッドファイル内の#use_frameworksのコメントを外します。
解決策2: - 派生データを削除してみてください
私は同じ問題を抱えていて、何が起こったのかを試してみるためにここに来ました。 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を使用しているアイテムに新しいクラスを追加することを忘れないでください。
私はきれいにしてプロジェクトを実行してもこの問題は解決しません。
しかし、プロジェクトを閉じて再開しました。
同じエラーに直面しました:UITextFieldをカスタマイズし、インターフェイスビルダーを使用した場合、コンソールのエラーは-CustomFieldクラスの未実装の初期化子 'init(frame :)'の使用でした
エラーを修正するイニシャライザーを追加しました
私の場合、私はUIView
をサブクラス化したライブラリを使っていました。 IB_DESIGNABLE
を使用していて、[super awakeFromNib]
への呼び出しがありませんでした。このメソッドへの呼び出しを追加したら、バグは消えました。
それがIB_DESIGNABLE
を実装していたという事実がこれに影響を及ぼしたかどうかはわかりません。
上記の複数の解決策を試した後、私は非常にXcodeのみを使用してシステムをシャットダウンし、電源を入れて、それは私のために働いた。
必要な変更を加えたら、ストーリーボードを変更するか、私の場合は.xibを "XCode 7"で開くように変更し、保存して閉じます。これはエラーに対処するための単なるギャップ対策ですが、最終的にはエラーを修正するか、または不可能になるまでこれを実行する必要があります。
そのIBDesignablesAgentCocoaTouch
ファイルを見つけることができないか、エディタから「選択ビューをデバッグ」しようとするとエラーが発生するような人にとっては、これらの「レンダリングに失敗した」エラーをデバッグする別の方法があります。
サイドバーからあなたの現在のMacを選択し(それはたぶんデフォルトで自動選択されるでしょう)、それから "IBSceneUpdate"を検索してEnterを押してください。レンダリングできないIBDesignableに対してXcodeエラーが発生するたびに、エラーに関する詳細が記載された新しい "IBSceneUpdate"エントリも表示されます。少なくとも私のIBDesignable
エラーをデバッグすることができた方法ではありません!
カスタムのuiviewにxibファイルを使用している場合これを試して:
から変更する
Bundle.main.loadNibNamed("UserView", owner: self, options: nil)
に:
let bundle = Bundle(for: UserView.self)
bundle.loadNibNamed("UserView", owner: self, options: nil)