Far be it from me to step into a controversy (ha ha), but I feel compelled to 
push back against this oversimplification.

(1) It's true that viewWillAppear can occur multiple times, but that doesn't 
make it a bad place to do one-time initialization. It is easy to distinguish 
the *first* time from all the other times, so the "once" problem is not really 
a problem at all.

(2) viewDidLoad can also occur multiple times - well, it could before iOS 6. So 
that's no solution, per se, to the "once" problem.

(3) For many things, viewWillAppear is much better place to initialize than 
viewDidLoad. Remember, viewDidLoad doesn't mean the view has been placed into 
the interface yet. It just means that the view controller has a view - no more. 
So, for example, dimensions may not yet be correct.

(4) The tendency to fall back on viewDidLoad mindlessly can be wrong for other 
reasons. As I point out in my book, Apple warns (in the UIViewController class 
reference, under navigationItem) that configuring a view controller's 
navigation item in conjunction with the creation of its view is not a good 
idea, because the circumstances under which the view is needed are not 
identical to the circumstances under which the navigation item is needed. 
(However, Apple's own code examples then proceed to violate this warning quite 
shamelessly.)

m.


On Tue, 19 Mar 2013 20:28:29 -0700, David Rowland <rowla...@sbcglobal.net> said:
>viewWillAppear occurs every time the view reappears, which may be frequently 
>and has nothing to do with the creation and initialization of the view. Each 
>time it appears you are recreating the button and setting in self.prevButton, 
>e.g. which will release the former button and install an identical one. So, 
>no, this is not the recommended place to do this. 
>
>Why viewDidLoad fails isn't clear. Is it possible that the toolbar is hidden 
>or behind some other view?
>
>
>On Mar 19, 2013, at 6:48 PM, Koen van der Drift <koenvanderdr...@gmail.com> 
>wrote:
>
>> I am programmatically adding some toolbar items to a view in a 
>> UIViewController subclass, and it only seems to work when I put the code in 
>> viewWillAppear:
>> 
>> // add a toolbar with a prev and next button
>>    self.navigationController.toolbarHidden = NO;
>>    UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] 
>> initWithBarButtonSystemItem: UIBarButtonSystemItemFlexibleSpace target: self 
>> action: nil];
>>    self.prevButton = [[UIBarButtonItem alloc] initWithTitle: @"Prev" style: 
>> UIBarButtonItemStyleBordered target: self action: nil];
>>    self.nextButton = [[UIBarButtonItem alloc] initWithTitle: @"Next" style: 
>> UIBarButtonItemStyleBordered target: self action: nil];
>> 
>>    self.toolbarItems = [NSArray arrayWithObjects: self.prevButton, 
>> flexibleItem, self.nextButton, nil];
>> 
>> If I put it in viewDidLoad, the toolbar never shows up.  In the book by 
>> Conway and Hillegass (3rd ed), they put similar code in init, but that also 
>> doesn't work in my case. Interestingly, I am adding a UISearchBar in init, 
>> and that works just fine.
>> 
>> Why is that? Is viewWillAppear the recommended place to do this?
>> 

--
matt neuburg, phd = m...@tidbits.com, <http://www.apeth.net/matt/>
A fool + a tool + an autorelease pool = cool!
Programming iOS 6! http://shop.oreilly.com/product/0636920029717.do
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to