2016-08-29 13 views
0

私は実行時にこのエラーを取得しています:実行時にxcodeレポートの制約エラーが見つかりましたが見つかりませんでしたか?

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7ff70350c8a0 UITableViewCellContentView:0x7ff7058511c0.trailingMargin == UIView:0x7ff705851f00.trailing> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 
2016-08-29 16:53:12.533 xxxx[7125:4051730] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
     (1) look at each constraint and try to figure out which you don't expect; 
     (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x7ff705a0aca0 UITableViewCellContentView:0x7ff705853420.trailingMargin == UIView:0x7ff7058546f0.trailing - 10>", 
    "<NSLayoutConstraint:0x7ff705a0ad90 UITableViewCellContentView:0x7ff705853420.trailingMargin == UIView:0x7ff7058546f0.trailing>" 
) 

しかし、私はそれが

UITableViewCellContentView取得する場所から確認することができませんでした:0x7ff705853420.trailingMargin == のUIView:

を0x7ff7058546f0.trailingを

IDEで見つけることができません。制約を設定する場所のコードを検索しようとしましたが、私が知る限り、エラーに一致するものは何もありません。

Xcode IDEが表示されないという制約がありますか?

+0

制約を '.xib'/storyboardまたはコードで設定していますか? – xoudini

+0

実行時に設定されたすべての制約を表示するには、ビューデバッガを使用できますが、制約がどこから来るのかを判断するのに役立つとは限りません。どのようにカスタムテーブルビューセルを構築していますか? – jcaron

+0

セルの間隔が正しくないようです。 – VenoMKO

答えて

1

あなたはNSLayoutConstraintを拡張し、制約が壊れたときに少しより多くの人が読める情報を返すためにdescriptionを上書きすることができます。

extension NSLayoutConstraint { 
    override public var description: String { 
     let id = identifier ?? "NO ID" 
     return "id: \(id), constant: \(constant)" 
    } 
} 

本の退屈な部分は手動で各制約のIDを設定する必要がありますけれども、拡張機能をコメントアウトすることによって必要な作業の量を制限し、標準的な制約の警告に関連する制約の識別子のみを設定することができます。

+0

ありがとうございます。両方の状態 "NO ID" - それは私が両方のランタイムを作成すると信じていることを示しますか?それとも、どういうわけか私はそれらを実行時に作成するフレームワーク内でコードをトリガーしていますか?それとも、手動検査で見逃したxmLファイルから残っているのでしょうか? – Tom

+0

'NO ID'を取得した場合は、識別子がないことを意味するので、すべての制約を徹底的に見直して、ストーリーボードまたはコードで識別子を追加する必要があります。ちょっと面倒ですが、壊れやすい制約を理解するのが最も簡単な方法です(私の意見では)。 – xoudini

1

MainStoryBoardをソースコードとして開き、そこから検索することができます。問題は2つの同じ制約(UIViewの末尾に余白があります)、そのうちの1つが0、その他が10です。ストーリーボードのソースコードから削除されていない可能性があります。

+0

XMLで問題を見つけることができませんでした。 – Tom