AppDelegate到UIViewController

我有一个示例代docker和一个实现文件和两个appDelegate文件。 我想添加什么项目做我的应用程序。 前两个文件是一个ViewController文件,所以我只需要拖动它,但另外两个是AppDelegate ,我显然不能有两个应用程序委托。 但是在这个示例应用程序的情况下,应用程序委托被用作一个适当的viewcontroller,因为在UIViewController文件的.m文件中,有这样的代码:

 AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

由于AppDelegate没有实现像applicationWillBecomeActive这样的方法,我怎样才能把文件转换成一个UIViewController文件? 我需要改变上面的代码来调用控制器,而不是委托(我的AppDelegate将保持不变)。

代码在GitHub上

这就是我所做的(代码需要包含Facebook API)。 去下载选项卡,并下载Archive.zip和AppDelegate.zip:https://github.com/Alexmitico45/FacebookRequests/downloads

基本上,控制器ContactFBSViewController被链接到故事板中的视图控制器。

如果我理解正确,您希望示例中AppDelegate的function位于您的应用程序中。 但是你不想更换你的应用程序的现有AppDelegate?

AppDelegate类与其他类没有任何区别。 区别它的一个事实是,它实现了UIApplicationDelegate ,并且在main.m被明确地引用为你的应用程序的启动类。

如果你想把它变成另一个class,我会:

  1. 重命名类(.h,.m,接口和实现名称),然后将其放入您的项目中。
  2. 在NewName.h中,删除顶部的UIApplicationDelegate的实现。
  3. 在NewName.m中,您需要查看UIApplication方法部分中的任何function,因为这是专门分配给AppDelegate类执行的function,并查看是否需要将其合并到现有的AppDelegate类中。 然后从NewName.m中移除这些UIApplicationDelegate方法,因为它们只能在实现UIApplicationDelegate时存在。

由于ViewController利用了其预期的AppDelegate在UIApplication层次结构中是一个长寿命的类的事实,因此您需要复制该行为。 这可能是通过在ViewController.h中创build一个新的引用NewName弱属性来实现的:

ViewController.h

 @class NewName; @property (nonatomic, weak) NewName *newNameDelegate; 

ViewController.m

 #import "NewName.h" ... @implementation ViewController @synthesize newNameDelegate; ... - (IBAction)sendRequestButtonAction:(id)sender { if (FBSession.activeSession.isOpen) { [newNameDelegate sendRequest]; } } 

NewName.m

 ... self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; self.viewController.newNameDelegate = self; ... 

希望这给你一个从哪里开始的想法。

我解决了这个问题。 我必须做的是使viewcontroller单身人士:

 + (FacebookViewController *) sharedManager; 

..然后使用这个代码来访问它:

 FacebookManager *manager = [FacebookManager sharedManager]; 

经过几天的试验和错误终于起作用了!