In the article, your recommendation is good - like you, I like to enter the model into the controller (an old habit from Smalltalk days - in particular, Dolphin Smalltalk follows this pattern quite widely).
I found that most of my controllers have init methods, such as:
- (id)initWithItem:(id<Nameable>)item addingTo: (id<ModelContainer>)model {
if (self = [self initWithNibName:@"ItemEditTableToolbarView" bundle:nil]) {
self.namedItem = item;
self.container = model;
}
return self;
}
Then you can call your controller as follows:
ReDoListEditController *itemViewController = [[ReDoListEditController alloc] initWithItem: item addingTo: model];
[self.navigationController pushViewController: itemViewController animated: YES];
[itemViewController release];
, Nib init ( , , , - . - Dolphin, ( ) - init init . , iPhone IB, .
, ( , ).
- XCode ( , )
"YourAppDelegate.m" applicationDidFinishLaunching: - :
viewController = [[AppRootViewController alloc] initWithModel: [ ]];
viewController.view.frame = [[UIScreen mainScreen] applicationFrame];
[window addSubview: viewController.view];
[ makeKeyAndVisible];
, , ( ):
- MainWindow.xib( , MainWindow - , IB)
- .plist MainWindow.xib( ).
main.m UIApplicationMain ( ) - :
int retVal = UIApplicationMain (argc, argv, nil, @ "YourAppDelegate" );
"YourAppDelegate.m" applicationDidFinishLaunching: - :
window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
viewController = [[AppRootViewController alloc] initWithModel: [ ]];
viewController.view.frame = [[UIScreen mainScreen] applicationFrame];
[window addSubview: viewController.view];
[ makeKeyAndVisible];
UIApplication:
- (MyModel *)model;
( ), , .
viewModel = [[UIApplication sharedApplication] model];
, , , , , .