web-dev-qa-db-ja.com

StoryboardファイルでinferredMetricsTieBreakersとマージの競合が発生する

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

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

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

ありがとう、-ダン。

46
Dan Morrow

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

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

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

38
Rick Pastoor

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

enter image description here

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

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

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

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

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

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

61

ストーリーボードで1つのビューコントローラーがセグエを介して他の2つ以上のビューコントローラーから接続され、シミュレートされたメトリック設定が「推定」に設定されている場合、タイブレーカーが発生するようですが、Xcodeは、推定が正確に1つのメトリック設定を意味することを確認できません(風景またはポートレート)すべての場合。

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

2
thesystem

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

0
Florin Odagiu