30 var CPViewControllerCachedCibs;
72 id _representedObject;
85 CPViewControllerCachedCibs = @{};
93 return [
self initWithCibName:nil bundle:nil];
96 - (id)initWithCibName:(
CPString)aCibNameOrNil bundle:(
CPBundle)aCibBundleOrNil
98 return [
self initWithCibName:aCibNameOrNil bundle:aCibBundleOrNil externalNameTable:nil];
101 - (id)initWithCibName:(
CPString)aCibNameOrNil bundle:(
CPBundle)aCibBundleOrNil owner:(
id)anOwner
103 return [
self initWithCibName:aCibNameOrNil bundle:aCibBundleOrNil externalNameTable:@{ CPCibOwner: anOwner }];
126 _cibName = aCibNameOrNil;
128 _cibExternalNameTable = anExternalNameTable || @{
CPCibOwner:
self };
161 var cib = [CPViewControllerCachedCibs objectForKey:_cibName];
166 cib = [[
CPCib alloc] initWithCibNamed:_cibName bundle:_cibBundle];
167 [CPViewControllerCachedCibs setObject:cib forKey:_cibName];
170 [cib instantiateCibWithExternalNameTable:_cibExternalNameTable];
189 var cibOwner = [_cibExternalNameTable objectForKey:CPCibOwner];
191 if ([cibOwner respondsToSelector:
@selector(viewControllerWillLoadCib:)])
192 [cibOwner viewControllerWillLoadCib:self];
196 if (_view === nil && [cibOwner isKindOfClass:[
CPDocument class]])
197 [
self setView:[cibOwner valueForKey:@"view"]];
201 var reason = [
CPString stringWithFormat:@"View for %@ could not be loaded from Cib or no view specified. Override loadView to load the view manually.", self];
206 if ([cibOwner respondsToSelector:
@selector(viewControllerDidLoadCib:)])
207 [cibOwner viewControllerDidLoadCib:self];
223 [
self willChangeValueForKey:"isViewLoaded"];
226 [
self didChangeValueForKey:"isViewLoaded"];
251 - (void)setView:(
CPView)aView
253 var willChangeIsViewLoaded = (_isViewLoaded == NO && aView != nil) || (_isViewLoaded == YES && aView == nil);
255 if (willChangeIsViewLoaded)
256 [
self willChangeValueForKey:"isViewLoaded"];
259 _isViewLoaded = aView !== nil;
261 if (willChangeIsViewLoaded)
262 [
self didChangeValueForKey:"isViewLoaded"];
265 - (BOOL)automaticallyNotifiesObserversOfIsViewLoaded
273 var CPViewControllerViewKey =
@"CPViewControllerViewKey",
274 CPViewControllerTitleKey =
@"CPViewControllerTitleKey",
275 CPViewControllerCibNameKey =
@"CPViewControllerCibNameKey",
276 CPViewControllerBundleKey =
@"CPViewControllerBundleKey";
278 @implementation CPViewController (CPCoding)
285 - (id)initWithCoder:(
CPCoder)aCoder
287 self = [
super initWithCoder:aCoder];
291 _view = [aCoder decodeObjectForKey:CPViewControllerViewKey];
292 _title = [aCoder decodeObjectForKey:CPViewControllerTitleKey];
293 _cibName = [aCoder decodeObjectForKey:CPViewControllerCibNameKey];
295 var bundlePath = [aCoder decodeObjectForKey:CPViewControllerBundleKey];
298 _cibExternalNameTable = @{
CPCibOwner:
self };
309 - (void)encodeWithCoder:(
CPCoder)aCoder
311 [
super encodeWithCoder:aCoder];
313 [aCoder encodeObject:_view forKey:CPViewControllerViewKey];
314 [aCoder encodeObject:_title forKey:CPViewControllerTitleKey];
315 [aCoder encodeObject:_cibName forKey:CPViewControllerCibNameKey];
316 [aCoder encodeObject:[_cibBundle bundlePath] forKey:CPViewControllerBundleKey];
321 @implementation CPViewController (CPSynthesizedAccessors)
334 - (void)setView:(
CPView)aValue
344 return _isViewLoaded;
350 - (id)representedObject
352 return _representedObject;
358 - (void)setRepresentedObject:(
id)aValue
360 _representedObject = aValue;
400 return _cibExternalNameTable;