シーケンスイメージボード要素はNibによって記述される(feat.awakeFromNib)
4314 ワード
StackOverflow: awakeFromNib, outlets and storyboards: is the documentation wrong?
🐶 シーケンスイメージボードをコンパイルします.
Xcodeでアプリケーションを構築すると、シーケンスイメージボードのコンパイルが行われます.
次に、
特定の条件は、シーケンスイメージボードID、Segueのターゲット、またはルートシーンがある場合にのみInfoを持つことです.plistに含める
今、Nibファイルについて正式に話しましょう.
つまり、シーケンスイメージボードのコンパイルによって生成されるNibファイルには、次の2つがあります.
Nib Sceneの最上位オブジェクトのみを格納(2)サブビューレイヤを格納するNiib 1.Sceneのtop-levelオブジェクトのみを格納するNib
前述の24142に格納されたNib
これらのnibファイルには、対応するシーンのtop-levelオブジェクト情報が含まれています.
(ビュープロファイルはtop-level object)
上記の例で示した共通名nibに対応
⑪「サブビューレイヤーを格納するNibファイル」の名前もあります.
サブビュー階層は、個別のnibファイルに含まれます.
⑪このnibファイルの名前は、「ビューコンテンツID」と「最上位サブビューID」です.
(オブジェクトIDは「Identity Inspector」で入手可能であることに注意してください)
例えば、AccountCollectionというシーンのView Con IDが
このシーンのviewレイヤのnibファイル名は
⑪シーンにサブレイヤーがない場合、ビューコンテキストのNibのみがサブレイヤーのNibを持っていない.
🦊 ビューコンテキストとSubviewレイヤのAwakeFromNib()の結果は違いますか?
勘定科目のAwakeFromNib()バー
このメソッドは、Nibファイルをソースとして作成したオブジェクトが初期化完了時に呼び出されます.
つまり、
АААААААААААААА
シーケンスイメージボードに配置されたビューは、
ただし、ビューアの
これは、前述のAwakeFromNib()定義に違反しています.どうしてこんなことになったの?
АААААААААААААААА
アプリケーションがシーケンスイメージボードからシーンをロードすると、コンテキストの表示などの最上位オブジェクトNibがロードされます.
この場合、Nibローダはtop-level object Nibのみをロードし、その中のサブビューレイヤNibをロードしないと
したがって、outlet/actionのようなサブビューレイヤは、ビューアのAwakeFromNib()ポイントで初期化されていない.
セカンダリビューレイヤのNibファイルは、ビューコンが
このプロセス中、
NibローダがサブビューレイヤNibローディングを完了すると、
🐶 シーケンスイメージボードをコンパイルします.
Xcodeでアプリケーションを構築すると、シーケンスイメージボードのコンパイルが行われます.
次に、
Info.plist
と.nib
のファイルを含むパッケージを取得します.以下に示します.:; pwd
/Users/mayoff/Library/<snip>/Pinner.app/Base.lproj/Main.storyboardc
:; ll
total 80
drwxr-xr-x 10 mayoff staff 340 May 11 22:13 ./
drwxr-xr-x 4 mayoff staff 136 May 11 22:13 ../
-rw-r--r-- 1 mayoff staff 1700 May 11 22:13 AccountCollection.nib
-rw-r--r-- 1 mayoff staff 1110 May 11 22:13 AccountEditor.nib
-rw-r--r-- 1 mayoff staff 2999 May 11 22:13 BYZ-38-t0r-view-8bC-Xf-vdC.nib
-rw-r--r-- 1 mayoff staff 439 May 11 22:13 Info.plist
-rw-r--r-- 1 mayoff staff 7621 May 11 22:13 LqH-9K-CeF-view-OwT-Ts-HoG.nib
-rw-r--r-- 1 mayoff staff 6570 May 11 22:13 OZq-QF-pn5-view-xSR-gK-reL.nib
-rw-r--r-- 1 mayoff staff 2473 May 11 22:13 UINavigationController-ZKB-z3-xgf.nib
-rw-r--r-- 1 mayoff staff 847 May 11 22:13 UIPageViewController-ufv-JN-y6U.nib
🐱 Info.plistInfo.plist
は、シーケンス画像ボード内の特定の条件を満たすシーンおよび対応するNibファイル名を含む.特定の条件は、シーケンスイメージボードID、Segueのターゲット、またはルートシーンがある場合にのみInfoを持つことです.plistに含める
:; plutil -p Info.plist
{
"UIViewControllerIdentifiersToNibNames" => {
"AccountCollection" => "AccountCollection"
"UINavigationController-ZKB-z3-xgf" => "UINavigationController-ZKB-z3-xgf"
"UIPageViewController-ufv-JN-y6U" => "UIPageViewController-ufv-JN-y6U"
"AccountEditor" => "AccountEditor"
}
"UIStoryboardDesignatedEntryPointIdentifier" => "UINavigationController-ZKB-z3-xgf"
"UIStoryboardVersion" => 1
}
🐭 Nibファイル今、Nibファイルについて正式に話しましょう.
つまり、シーケンスイメージボードのコンパイルによって生成されるNibファイルには、次の2つがあります.
Nib Sceneの最上位オブジェクトのみを格納
前述の24142に格納されたNib
これらのnibファイルには、対応するシーンのtop-levelオブジェクト情報が含まれています.
(ビュープロファイルはtop-level object)
上記の例で示した共通名nibに対応
⑪「サブビューレイヤーを格納するNibファイル」の名前もあります.
:; strings - AccountCollection.nib |grep -e '-.*-'
UIPageViewController-ufv-JN-y6U
BYZ-38-t0r-view-8bC-Xf-vdC <---------
UpstreamPlaceholder-5Hn-fK-fqQ
UpstreamPlaceholder-8GL-mk-Rao
q1g-aL-SLo.title
2.サブビューレイヤーを格納するNibサブビュー階層は、個別のnibファイルに含まれます.
⑪このnibファイルの名前は、「ビューコンテンツID」と「最上位サブビューID」です.
(オブジェクトIDは「Identity Inspector」で入手可能であることに注意してください)
例えば、AccountCollectionというシーンのView Con IDが
Info.plist
であり、ビューCon内のtop-level View IDがAccountCollection.nib
であるとするこのシーンのviewレイヤのnibファイル名は
AccountEditor.nib
です.⑪シーンにサブレイヤーがない場合、ビューコンテキストのNibのみがサブレイヤーのNibを持っていない.
🦊 ビューコンテキストとSubviewレイヤのAwakeFromNib()の結果は違いますか?
勘定科目のAwakeFromNib()バー
このメソッドは、Nibファイルをソースとして作成したオブジェクトが初期化完了時に呼び出されます.
つまり、
BYZ-38-t0r
メソッドを呼び出すと、所有しているすべてのIBoutletが初期化後に接続され、アクセス可能になる必要があります.АААААААААААААА
シーケンスイメージボードに配置されたビューは、
8bC-Xf-vdC
を呼び出すと、サブビューまで正常に初期化され、独自のoutlet/actionにアクセスできます.ただし、ビューアの
BYZ-38-t0r-view-8bC-Xf-vdC.nib
ポイントでout/actionにアクセスできません.これは、前述のAwakeFromNib()定義に違反しています.どうしてこんなことになったの?
АААААААААААААААА
アプリケーションがシーケンスイメージボードからシーンをロードすると、コンテキストの表示などの最上位オブジェクトNibがロードされます.
この場合、Nibローダはtop-level object Nibのみをロードし、その中のサブビューレイヤNibをロードしないと
awakeFromNib()
メッセージが送信される.したがって、outlet/actionのようなサブビューレイヤは、ビューアのAwakeFromNib()ポイントで初期化されていない.
セカンダリビューレイヤのNibファイルは、ビューコンが
awakeFromNib()
メソッドでawakeFromNib()
Propertyを要求するまでロードされません.このプロセス中、
awakeFromNib()
メソッドは、サブビューをNibから分離し、サブビュー階層オブジェクトを所有者ビューコンテンツのoutlet/actionに接続するNibローダがサブビューレイヤNibローディングを完了すると、
loadView()
メッセージがサブビューレイヤオブジェクトに渡されます.view
が終了すると、instantiateWithOwner()
に関するメッセージがビーコンに送信される.Reference
この問題について(シーケンスイメージボード要素はNibによって記述される(feat.awakeFromNib)), 我々は、より多くの情報をここで見つけました https://velog.io/@yohanblessyou/스토리보드의-요소가-Nib이-되는-과정-feat.-awakeFromNibテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol