i have been struggling few days , have received valuable on way s.o. have made simplest possible project reduce possibilities of being typo. project is, viewcontroller holds container view hooked childviewcontroller. "parent" viewcontroller set delegate of childviewcontroller. in viewdidload of child passing value string. string should passed on parent , printed on console. here files.
viewcontroller.h
#import <uikit/uikit.h> #import "childviewcontroller.h" @interface viewcontroller : uiviewcontroller <childviewcontrollerdelegate> @end viewcontroller.m
#import "viewcontroller.h" @interface viewcontroller () @property nsstring *myvalueretrieved; @end @implementation viewcontroller - (void)viewdidload { [super viewdidload]; childviewcontroller *controller = [self.storyboard instantiateviewcontrollerwithidentifier:@"childvc"]; controller.delegate = self; nslog(@"here value: %@",self.myvalueretrieved); } - (void)didreceivememorywarning { [super didreceivememorywarning]; } - (void) passvalue:(nsstring *)thevalue{ self.myvalueretrieved = thevalue; } @end childviewcontroller.h
#import <uikit/uikit.h> @protocol childviewcontrollerdelegate; @interface childviewcontroller : uiviewcontroller @property (weak)id <childviewcontrollerdelegate> delegate; @end @protocol childviewcontrollerdelegate <nsobject> - (void) passvalue:(nsstring*) thevalue; @end childviewcontroller.m
#import "childviewcontroller.h" @interface childviewcontroller () @property nsarray *colors; @end @implementation childviewcontroller - (void)viewdidload { [super viewdidload]; [self.delegate passvalue:@"hello"]; } - (void)didreceivememorywarning { [super didreceivememorywarning]; } @end am right think when app launched, console should log following message: "here value: hello". doing wrong in terms of logically not getting delegation or silly typo somewhere? tx
you're assuming view loaded when view controller instantiated. that's how works. view gets loaded when it's needed (like add parent view).
but can force view load , make work. call -loadviewifneeded on child view controller right after setting delegate. want:
controller.delegate = self; [controller loadviewifneeded]; nslog(@"here value: %@",self.myvalueretrieved); or, if want call delegate in viewdidload, you'd need move nslog -passvalue: method, since primary view controller's viewdidload method have finished running.
Comments
Post a Comment