Passing a delegate to another view controller's delegate

空扰寡人 提交于 2020-01-07 02:59:33

问题


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.


回答1:


  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, strong) 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.



来源:https://stackoverflow.com/questions/45317314/passing-a-delegate-to-another-view-controllers-delegate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!