4

我有一个带有标头和实现文件以及两个 appDelegate 文件的示例代码。我想将项目的功能添加到我的应用程序中。前两个文件是一个ViewController文件,所以我只要把它拖进去,但另外两个是AppDelegate,我显然不能有两个app delegate。但是在这个示例应用程序的情况下,应用程序委托被用作适当的视图控制器,因为在文件的 .m 文件中UIViewController,有以下代码:

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

由于AppDelegate没有实现 applicationWillBecomeActive: 等方法,我如何将文件转换为 UIViewController 文件?我需要在上面的代码中更改什么来调用控制器而不是委托(我的 AppDelegate 将保持不变)。

代码在GitHub 上

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

基本上,控制器ContactFBSViewController链接到情节提要中的视图控制器。

4

2 回答 2

3

如果我理解正确,您希望AppDelegate示例中的功能出现在您的应用中。但是您不想替换您应用的现有 AppDelegate?

AppDelegate 类与另一个类并没有什么不同。它的不同之处在于它实现了UIApplicationDelegate,并且在 中明确提到main.m,作为您的应用程序的启动类。

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

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

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

视图控制器.h

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

视图控制器.m

#import "NewName.h"

...

@implementation ViewController
@synthesize newNameDelegate;

...

- (IBAction)sendRequestButtonAction:(id)sender {
    if (FBSession.activeSession.isOpen) {
        [newNameDelegate sendRequest];
    }
}

新名字.m

...

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

...

希望这能让您知道从哪里开始。

于 2012-11-11T20:46:02.430 回答
1

我解决了这个问题。我必须做的是使视图控制器成为单例:

+ (FacebookViewController *) sharedManager;

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

FacebookManager *manager = [FacebookManager sharedManager];

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

于 2012-11-21T16:55:53.340 回答