The request is merely kicked off in viewdidload, but it's asynchronous. 

Sent from my iPhone

On Jan 16, 2012, at 12:57 PM, Evadne Wu <[email protected]> wrote:

> Synchronous networking should be avoided, and stealing the view from another 
> view controller is bad.  Methinks.  :p
> 
> * Use UINib, create some XIBs whose view outlets connect to different views, 
> but the file’s owner are of the same class
> 
> * On initial view load, load the XIB using UINib’s 
> -instantiateWithOwner:options:, which contains a view with an activity 
> indicator, then asynchronously start loading stuff
> 
> * When data arrives, look at it then use the same method on UINib to load 
> other views, *then* swizzle your view.  If your view is already presented in 
> a navigation controller, this will likely break everything. I think this 
> might not work out of the box, but you get the idea;
> 
> 
>    - (void) handleRemoteResponse:(id)response {
> 
>        UINavigationController *navController = [[self.navigationController 
> retain] autorelease];
>        NSParameterAssert([self isViewLoaded] && self.view.window && 
> navController.topViewController == self);
>        UIViewController *poppedVC = [[[navController 
> popViewControllerAnimated:NO] retain] autorelease];
>        NSParameterAssert((poppedVC == self) && !self.navigationController);
>    
>        UIView *oldView = [[self.view retain] autorelease];
>        NSArray *instantiatedObjects = [[UINib nibWithName:[[self class] 
> nibNameForRemoteResponse:response] bundle:nil] instantiateWithOwner:self 
> options:nil];
>        NSParameterAssert([self isViewLoaded] && ([instantiatedObjects 
> objectAtIndex:0] == self.view) && (oldView != self.view));
>    
>        [navController pushViewController:poppedVC animated:NO];
>        NSParameterAssert(navController.topViewController == self);
> 
>    }
> 
>    + (NSString *) nibNameForRemoteResponse:(id)response {
>    
>        NSAssert1(NO, @"%s shall be implemented", __PRETTY_FUNCTION__);
>        return nil;
>    
>    }
> 
> -ev
> 
> On Jan 17, 2012, at 1:38 AM, James West wrote:
> 
>> I have a class design issue I was hoping someone could help me out with. 
>> 
>> I'm currently developing an iOS app that relies heavily on a remote API for 
>> all of its data. Most data is requested in viewDidLoad.
>> 
>> The availability and format of data can change, and in response to that I 
>> need to implement three different designs depending on how much data I have 
>> access to: the normal design, a data not found design and a partial data 
>> design. I'm trying to declare as much as possible in xib files.
>> 
>> Right now I have one 'master' view controller, which when all things go 
>> according to plan, presents a view for all of the data. In cases where the 
>> data is not available, it instantiates an "inner view" controller and 
>> assigns its view to self.view:
>> 
>> 
>>   if ([analysis length] == 0) {
>> 
>> 
>>       hasReview = NO;
>> 
>> 
>>       UnreviewedSPP* unreviewedSPPView = [[UnreviewedSPP alloc] init];
>> 
>> 
>>       unreviewedSPPView.ProductName = self.productName;
>> 
>> 
>>       unreviewedSPPView.SdcId = self.sdcId;
>> 
>> 
>>       unreviewedSPPView.Delegate = self;
>> 
>> 
>>       NSArray* newViews = [[NSBundle mainBundle] 
>> loadNibNamed:@"UnreviewedSPP" owner:unreviewedSPPView options:nil];
>> 
>> 
>>       self.view = [newViews objectAtIndex:0];
>> 
>> 
>>       return;
>> 
>> 
>>   }
>> 
>> 
>> 
>> This works pretty well, except for that fact that I cannot seem to push any 
>> new views onto the navigationController stack from the inner view (using a 
>> custom button that can execute a block):
>> 
>> 
>>       [priceButton handleControlEvent:UIControlEventTouchUpInside 
>> withBlock:^{
>> 
>> 
>>           WebViewController* wv = [[[WebViewController alloc] 
>> initWithNibName:@"WebViewController" bundle:nil] autorelease];
>> 
>> 
>>           wv.url = offerURL;
>> 
>> 
>>           [Delegate 
>> performSelector:@selector(pushViewControllerFromSubview:) withObject:wv];
>> 
>> 
>>       }];
>> 
>> 
>> 
>> I've tried using a delegate pattern as well as assigning the outer view 
>> controller's navigationcontroller as a property to the inner view. Neither 
>> works.
>> 
>> This whole thing feels rather hackish, and I'm sure there's something by 
>> design in the framework that stops this. Any thoughts?
>> 
>> -- 
>> James West
>> Sent with Sparrow (http://www.sparrowmailapp.com/?sig)
>> 
>> _______________________________________________
>> 
>> Cocoa-dev mailing list ([email protected])
>> 
>> 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:
>> http://lists.apple.com/mailman/options/cocoa-dev/ev%40monoceroi.com
>> 
>> This email sent to [email protected]
> 
_______________________________________________

Cocoa-dev mailing list ([email protected])

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to