Ryan Cyrus Ryan Cyrus - 1 year ago 90
Objective-C Question

Passing a delegate to another view controller's delegate

I'm working to build one feature in an app written in Objective-C. I can't post code but I will try to be descriptive with my world. The problem i'm facing is related to delegates.


  1. AlphaViewController
    has
    ConnectionView
    as one of its
    delegate
    . It helps to add perform some operation on data provided to
    AlphaViewController
    and we show output on
    AlphaViewController's
    view.

  2. When you click on a button in
    AlphaViewController
    , I show an
    UIAlertController
    . From which I can click a button to open
    ReportView
    .
    BetaViewController
    creates
    ReportView
    .

  3. BetaViewController
    has
    ReportGenerator
    as its
    delegate
    .
    ReportGenerator
    helps to generate some HTML which I render in
    BetaViewController's
    view.



My problem is that, I wanna use
ConnectionView's
output (which I believe is part of
ConnectionView
object in
AlphaViewController
)
, in
ReportGenerator
to process it and then render data in HTML in
BetaViewController's
view.

I've been messing around to find a solution but haven't been able to figure out anything. I'm not good with delegates.

Please assist me to achieve my goal here. I'm sorry that I can't post the code.

Answer Source
  1. You can pass your output of ConnectionView's from AlphaViewController to BetaViewController before pushing. When you assign your BetaViewController as delegate of ReportGenerator pass data i.e ConnectionView's output to ReportGenerator and get the ReportGenerator to process it and then render data in HTML in BetaViewController's view.

It may seem to be complicated in words but it can be achieved.

  1. There is also second way much simpler than above using AppDelegate. You can declare and define a property in your AppDelegate class and access it from anywhere in class.

    //Interface:
    
    @interface MyAppDelegate : NSObject  {
       NSString *yourString; // Declare your object
    }
    
    @property (nonatomic, retain) NSString *yourString;
    ...
    @end
    
    //and in the .m file for the App Delegate     
    @implementation MyAppDelegate
    
    @synthesize yourString;
    yourString = some string;
    
    @end
    
    //You can access the property to save and retrieve your file. You can save 
    MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
    appDelegate.yourString = some NSString;     //..to write
    

Yo can read the value in BetaViewController or ReportGenerator as per your requirement as

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
someString = appDelegate.myString;  //..to read

For for no. of properties you can create Model Class and you access it as defined above.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download