Fixed: CPViewController -isViewLoaded property was always NO in async mode (loadViewWithCompletionHandler:).

The async mode calls the completionHandler whereas the sync mode calls the -viewDidLoad method.
Both are now run within the will/did change block of the isViewLoaded property.
This commit is contained in:
cacaodev committed 2016-05-08 23:09:50 +02:00
1 parent f67fafdb8e
commit b3465ddf89
1 file changed
+15 -8
+15 -8
View File
@@ -150,7 +150,7 @@ var CPViewControllerCachedCibs;
If you use Interface Builder to create your views, and you initialize the
controller using the initWithCibName:bundle: methods, then you MUST NOT override
this method.
@note When using this method, the cib loading system is synchronous.
See the loadViewWithCompletionHandler: method for an asynchronous loading.
*/
@@ -179,11 +179,11 @@ var CPViewControllerCachedCibs;
/*!
Loads asynchronously the cib and creates the view that the controller manages.
@param aHandler A function passing the loaded view as the first argument
and a network error or nil as the second argument: function(view, error).
@note If the view has already been loaded, the completion handler is run immediatly
@note If the view has already been loaded, the completion handler is run immediatly
and the process is synchronous.
*/
- (void)loadViewWithCompletionHandler:(Function/*(view, error)*/)aHandler
@@ -217,7 +217,7 @@ var CPViewControllerCachedCibs;
[CPViewControllerCachedCibs setObject:aCib forKey:_cibName];
[aCib instantiateCibWithExternalNameTable:_cibExternalNameTable];
aHandler(_view, nil);
[self _viewDidLoadWithCompletionHandler:aHandler];
}
else
{
@@ -228,13 +228,13 @@ var CPViewControllerCachedCibs;
else
{
[cib instantiateCibWithExternalNameTable:_cibExternalNameTable];
aHandler(_view, nil);
[self _viewDidLoadWithCompletionHandler:aHandler];
}
}
else
{
_view = [CPView new];
aHandler(_view, nil);
[self _viewDidLoadWithCompletionHandler:aHandler];
}
}
@@ -285,9 +285,16 @@ var CPViewControllerCachedCibs;
}
- (void)_viewDidLoad
{
[self _viewDidLoadWithCompletionHandler:function() {
[self viewDidLoad];
}];
}
- (void)_viewDidLoadWithCompletionHandler:(Function)aHandler
{
[self willChangeValueForKey:"isViewLoaded"];
[self viewDidLoad];
aHandler(_view, nil);
_isViewLoaded = YES;
[self didChangeValueForKey:"isViewLoaded"];
}