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,我会:
- 重命名类(.h,.m,接口和实现名称),然后将其放入您的项目中。
- 在NewName.h中,删除顶部的UIApplicationDelegate的实现。
- 在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];
经过几天的试验和错误终于起作用了!