47

ストーリーボード ファイルで競合が発生したときはいつでも、通常は解決できます。ただし、2 週間で 2 回発生した問題があります。

ストーリーボード ファイルの一番下に、"inferredMetricsTieBreakers" という名前のブロックがあり、その中にたくさんの "segue" タグが含まれています。ローカル リポジトリの一部のセグエが、リモート リポジトリの別のセグエと競合しているようです。安全のために、「両方を選択する」ことができました。しかし、これは以前に発生したので、今後も発生するのではないかと心配しており、最終的にはストーリーボード ファイルの最後にこれらのセグエ参照の長いリストが作成されます。

誰かがファイル内のこれらのタグについて詳しい知識を持っているかどうか、それとも盲目的に「両方を選択」して問題を無視し続けるべきかどうか疑問に思っています。

ありがとう、ダン。

4

4 に答える 4

62

ストーリーボードの各ビュー コントローラーには、属性インスペクターで確認できる「シミュレートされたメトリック」があります。

ここに画像の説明を入力

これらのメトリックの一部は推測されます (したがって、推測されたメトリック)。

@thesystem で言及されているように、特定のビュー コントローラーが複数のセグエの宛先である場合、セグエのソース ビュー コントローラーのシミュレートされたメトリック間に違いが生じる可能性があります。これらの違いに対処するために、IB はセグエを選択して、目的のビュー コントローラーの推定メトリックを解決するときにタイを破ります。

セクション全体を削除しても安全であるという@rick-pastoorの結論inferredMetricsTieBreakersは、IBが異なるタイブレークセグエを選択できるという点で正しいです。ただし、新しいタイブレーカーが IB で同じレイアウト結果につながるという保証はありません。*

たとえば、タイブレーク セグエに応じて、ビュー コントローラーがステータス バーの有無にかかわらず IB に表示される状況がありました。そのビューは両方のケースで 568pts の高さを維持していたため、トップ レイアウト ガイドの位置は常に変化していました。これは、トップ レイアウト ガイドに制約されたビューのフレームに対する他の望ましくない (そしてほとんど意味のない) 変更に雪だるま式に追加されました。

これらの観察に基づいて、推論されたメトリックの新しいセットと古いセットの両方を選択することはお勧めできません。代わりに、両方のセットを削除してから IB でストーリーボードを開き、結合をコミットする前に結合を解除できるようにします。タイブレーク セグエの変更による望ましくないフレームの変更を回避するには、宛先ビュー コントローラーの関連するシミュレートされたメトリックに対して "推定" 以外の値を選択します。これにより、IB が一貫したレイアウト結果を生成することが保証されます。

* ビューがアーカイブ解除された直後の初期レイアウトに依存するロジックがない限り、実行時の結果は同じである必要があります。

于 2014-07-28T20:38:28.193 に答える
40

ここでも同じことが起こっています。「両方を選択」方法を使用した後、ストーリーボード ファイルにエラーが発生しました。inferredMetricsTieBreakersストーリーボードでセグエ参照を検索すると、セクション内で言及されている 1 つのセグエが見つかりました。リストからセグエを削除すると、壊れているビルドが解決されました。

これが何をするのかを調べるためinferredMetricsTieBreakersに、最初にセクション全体を削除してみました。私のビルドを壊します。次に、すべてのアイテムを削除しました。ビルド中に、Xcode は 2 つの新しい異なるセグエをリストに追加しました (マージ前は 3 つありました)。私が構築しているアプリケーションは正常に動作しています。

私の結論: すべてのアイテムを削除して、クリーン ビルドを実行しても安全です。これにより、ストーリーボードがきれいに保たれます。

于 2012-10-31T16:40:52.670 に答える
2

ストーリーボードで1つのView Controllerがセグエを介して2つ以上の他のView Controllerから接続され、そのシミュレートされたメトリック設定が「推測」に設定されている場合、タイブレーカーが発生するように見えますが、Xcodeは推測が正確に1つのメトリック設定を意味することを確認できません(横向きまたは縦向き) あらゆる場合に。

すべてのコントローラーのシミュレートされたメトリックを「推定」に変更して修正し、すべてのメトリックは、シミュレートされたメトリック設定「ランドスケープ」を修正したコントローラーから推測されます。その後、セクションからタイ ブレーカーのセグエ ID を削除しました (ただし、セクション自体は削除しません)。

于 2014-07-11T09:26:38.977 に答える
0

メトリックを推定からフリーフォームに変更しました (Xcode 8、Swift 3)。私の問題を解決しました。

于 2016-12-01T22:47:02.243 に答える