Per puro caso ho scoperto che chiamare [bar.view addSubview:[foo view]]
non funziona, ma [bar.view addSubview:foo.view]
fa nel seguente codice.Perché la vista [foo] si comporta diversamente da foo.view nel mio codice?
foo=[fooViewController alloc] initWithNibName:@"fooViewController" andBundle:nil];
[self.view addSubview:foo.view];//here's where I swap the two commands out
[foo aFunctionThatSendsAMessageToOneOfFoosSubViews];
(L'ultima linea è perché foo
ha alcuni sotto-vista che devono essere impostati prima di eseguire -. In particolare, un UIWebView
Se non sono stati istanziati prima che il messaggio viene inviato, il messaggio venti fino andando a nil
Con foo
)
ho pensato che questi due erano funzionalmente identico - che foo.view
chiama lo stesso getter che [foo view]
fa, ma in pratica non è questo il caso..; la sintassi del punto ottiene i risultati desiderati, mentre l'uso delle parentesi termina inviando il messaggio a nil
.
Se mi avessi chiesto dieci minuti fa, ti avrei detto che la differenza tra le due espressioni era "sintassi e nient'altro". Dato che sono chiaramente sbagliato, ho bisogno di capire come ho sbagliato o ho intenzione di inciampare su di esso di nuovo.
Hai provato a confrontare l'output effettivo di '[foo view]' e 'foo.view'? Essi devono essere uguali. – Costique
In realtà, si. Ho usato NSLog (@ "View Info:% @", [foo view]) e una dichiarazione simile a foo.view. Identico - anche quando li inverto. Sembra che restituiscano esattamente la stessa cosa. – RonLugge
Quando si visualizza il codice nell'Assistente Editor di Xcode e si sceglie "Assemblaggio" dal menu a discesa dello smoking, si osservano differenze tra l'uso della sintassi e delle parentesi? –