AppDelegate到UIViewController

时间:2012-11-11 20:12:28

标签: ios xcode

我有一个带有标题和实现文件的示例代码以及两个appDelegate文件。我想将项目的功能添加到我的应用程序中。前两个文件是一个ViewController文件,所以我只需要将其拖入,但其他两个是AppDelegate,我显然不能有两个应用程序代理。但是在这个示例应用程序的情况下,app委托被用作正确的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基本上与故事板中的viewcontroller相关联。

2 个答案:

答案 0 :(得分:3)

如果我理解正确,您希望示例中的AppDelegate功能位于您的应用中。但您不想替换应用程序现有的AppDelegate吗?

AppDelegate类与其他类没有任何不同。它与众不同之处在于它实现UIApplicationDelegate,并在main.m中明确引用,作为您应用的启动类。

如果你想将它转换成另一个类,我会:

  1. 重命名类(.h,.m,接口和实现名称),然后将其放入项目中。
  2. 在NewName.h中,删除顶部的UIApplicationDelegate实现。
  3. 在NewName.m中,您希望查看 UIApplication方法部分中的任何功能,因为该功能专门分配给AppDelegate类执行,并查看是否或如何需要要合并到现有的AppDelegate类中。然后从NewName.m中删除那些UIApplicationDelegate方法,因为它们只能在您实现UIApplicationDelegate时存在。
  4. 由于ViewController利用了其预期的AppDelegate是UIApplication层次结构中的长期类,因此您需要复制该行为。在ViewController.h中创建一个引用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;
    
    ...
    

    希望这可以让您了解从哪里开始。

答案 1 :(得分:1)

我解决了这个问题。我必须做的是使viewcontroller成为一个单例:

+ (FacebookViewController *) sharedManager;

..然后使用此代码访问它:

FacebookManager *manager = [FacebookManager sharedManager];

经过几天的反复试验,它终于有效了!!