Ostatnio pisałem jakiś kod, gdzie starał się odnosić do gniazdka na UIViewController
ja właśnie tworzony z [storyboard instantiateViewControllerWithIdentifier]
i modyfikować podrzędny że wylot wskazywanego przed przedstawieniem ViewController
. Nie zadziałało, ponieważ widok ViewController
nie załadował jeszcze swoich subviews, w tym ten, do którego nawiązał mój adres, więc własność właśnie dała mi zerowy wskaźnik.Clean sposobem na widok wymusić załadowanie subviews wczesne
Po (z jakiejś walki) tropienia przyczynę mojego problemu w debugger, I Googled wokół i dowiedział się, poprzez odpowiedzi jak this one, że mogę spowodować pogląd załadować jego subviews bez wyświetlania poprzez wywołanie myViewController.view
getter . Potem mogę bez problemu uzyskać dostęp do mojego gniazdka.
To jasne hack, choć i Xcode - całkiem słusznie - nie podoba, i gniewnie protestuje z tego ostrzeżenia:
Property wynik dostęp nieużywany - getters nie powinny być wykorzystywane do działań niepożądanych
Czy istnieje nie-hacky alternatywny sposób na zrobienie tego, który nie ma wpływu na zdobywcę .view
? Alternatywnie, czy istnieją kanoniczne/idiomatyczne wzorce dla tego scenariusza, obejmujące coś w rodzaju dynamicznego dodawania programu obsługi do wywołania, gdy tylko ładowane są subviews?
Czy jest to standardowe rozwiązanie tylko po to, aby zamienić myViewController.view
na [myViewController view]
, aby zamknąć ostrzeżenie Xcode'a, a następnie żyć z hackerem?
można zmienić dowolny OBJ. właściwość [właściwość obj], aby zatrzymać to ostrzeżenie. Nie ma różnicy między geterem ObjC a selektorem bez argumentów. –