70 id _representedObject;
99 - (id)initWithCibName:(
CPString)aCibNameOrNil bundle:(
CPBundle)aCibBundleOrNil owner:(
id)anOwner
124 _cibName = aCibNameOrNil;
126 _cibExternalNameTable = anExternalNameTable || @{
CPCibOwner:
self };
160 var cib = [CPViewControllerCachedCibs objectForKey:_cibName];
166 [CPViewControllerCachedCibs setObject:cib forKey:_cibName];
169 [cib instantiateCibWithExternalNameTable:_cibExternalNameTable];
184 - (void)loadViewWithCompletionHandler:(Function)aHandler
192 var cib = [CPViewControllerCachedCibs objectForKey:_cibName];
196 var cibName = _cibName;
198 if (![cibName hasSuffix:
@".cib"])
199 cibName = [cibName stringByAppendingString:@".cib"];
203 url = [bundle _cibPathForResource:cibName];
211 aCib = [[
CPCib alloc] _initWithData:data bundle:_cibBundle cibName:_cibName];
213 [CPViewControllerCachedCibs setObject:aCib forKey:_cibName];
214 [aCib instantiateCibWithExternalNameTable:_cibExternalNameTable];
215 [
self _viewDidLoadWithCompletionHandler:aHandler];
219 aHandler(nil, anError);
225 [cib instantiateCibWithExternalNameTable:_cibExternalNameTable];
226 [
self _viewDidLoadWithCompletionHandler:aHandler];
232 [
self _viewDidLoadWithCompletionHandler:aHandler];
249 var cibOwner = [_cibExternalNameTable objectForKey:CPCibOwner];
251 if ([cibOwner respondsToSelector:
@selector(viewControllerWillLoadCib:)])
252 [cibOwner viewControllerWillLoadCib:self];
256 if (_view === nil && [cibOwner isKindOfClass:[
CPDocument class]])
257 [
self setView:[cibOwner valueForKey:@"view"]];
261 var reason = [
CPString stringWithFormat:@"View for %@ could not be loaded from Cib or no view specified. Override loadView to load the view manually.", self];
266 if ([cibOwner respondsToSelector:
@selector(viewControllerDidLoadCib:)])
267 [cibOwner viewControllerDidLoadCib:self];
284 [
self willChangeValueForKey:"isViewLoaded"];
287 [
self didChangeValueForKey:"isViewLoaded"];
290 - (void)_viewDidLoadWithCompletionHandler:(Function)aHandler
292 [
self _registerOrUnregister:YES notificationsForView:_view];
294 [
self willChangeValueForKey:"isViewLoaded"];
295 aHandler(_view, nil);
297 [
self didChangeValueForKey:"isViewLoaded"];
327 - (void)viewWillAppear
346 - (void)viewDidAppear
365 - (void)viewWillDisappear
382 - (void)viewDidDisappear
397 var willChangeIsViewLoaded = (_isViewLoaded == NO && aView != nil) || (_isViewLoaded == YES && aView == nil);
399 [
self _registerOrUnregister:NO notificationsForView:_view];
400 [
self _registerOrUnregister:YES notificationsForView:aView];
402 if (willChangeIsViewLoaded)
406 _isViewLoaded = aView !== nil;
408 if (willChangeIsViewLoaded)
412 - (BOOL)automaticallyNotifiesObserversOfIsViewLoaded
417 - (void)_registerOrUnregister:(BOOL)shouldRegister notificationsForView:(
CPView)aView
423 notifs_to_sel = @{_CPViewWillAppearNotification :
@"viewWillAppear",
424 _CPViewDidAppearNotification :
@"viewDidAppear",
425 _CPViewWillDisappearNotification :
@"viewWillDisappear",
426 _CPViewDidDisappearNotification :
@"viewDidDisappear"};
428 [notifs_to_sel enumerateKeysAndObjectsUsingBlock:function(notif, selString, stop)
430 var selector = CPSelectorFromString(selString);
431 if ([
self implementsSelector:selector])
434 [center addObserver:self selector:selector name:notif object:aView];
436 [center removeObserver:self name:notif object:aView];
462 _view = [aCoder decodeObjectForKey:CPViewControllerViewKey];
463 _title = [aCoder decodeObjectForKey:CPViewControllerTitleKey];
464 _cibName = [aCoder decodeObjectForKey:CPViewControllerCibNameKey];
466 var bundlePath = [aCoder decodeObjectForKey:CPViewControllerBundleKey];
469 _cibExternalNameTable = @{
CPCibOwner:
self };
484 [aCoder encodeObject:_view forKey:CPViewControllerViewKey];
485 [aCoder encodeObject:_title forKey:CPViewControllerTitleKey];
486 [aCoder encodeObject:_cibName forKey:CPViewControllerCibNameKey];
487 [aCoder encodeObject:[_cibBundle bundlePath] forKey:CPViewControllerBundleKey];
515 return _isViewLoaded;
521 - (id)representedObject
523 return _representedObject;
529 - (void)setRepresentedObject:(
id)aValue
531 _representedObject = aValue;
571 return _cibExternalNameTable;
Used to implement exception handling (creating & raising).
id initWithCoder:(CPCoder aCoder)
void willChangeValueForKey:(CPString aKey)
A Cappuccino wrapper for any data type.
void raise:reason:(CPString aName, [reason] CPString aReason)
Provides loading of a URL request.
var CPViewControllerViewKey
void encodeWithCoder:(CPCoder aCoder)
CPNotificationCenter defaultCenter()
A mutable key-value pair collection.
id requestWithURL:(CPURL aURL)
var CPViewControllerBundleKey
global CPApp var CPViewControllerCachedCibs
An immutable string (collection of characters).
void setView:(CPView aView)
CPData dataWithRawString:(CPString aString)
CPOperationQueue mainQueue()
void didChangeValueForKey:(CPString aKey)
CPURLConnection sendAsynchronousRequest:queue:completionHandler:(CPURLRequest aRequest, [queue] CPOperationQueue aQueue, [completionHandler] Function aHandler)
Defines methods for use when archiving & restoring (enc/decoding).
Sends messages (CPNotification) between objects.
CPBundle bundleWithPath:(CPString aPath)
Contains data obtained during a request made with CPURLConnection.
id initWithCibName:bundle:externalNameTable:(CPString aCibNameOrNil, [bundle] CPBundle aCibBundleOrNil, [externalNameTable] CPDictionary anExternalNameTable)
id initWithCibName:bundle:(CPString aCibNameOrNil, [bundle] CPBundle aCibBundleOrNil)
var CPViewControllerCibNameKey
var CPViewControllerTitleKey
id initWithCibNamed:bundle:(CPString aName, [bundle] CPBundle aBundle)
Represents an operation queue that can run CPOperations.
id stringWithFormat:(CPString format, [,] ...)