4

ヘッダーと実装ファイル、および2つのappDelegateファイルを含むサンプルコードがあります。プロジェクトの機能をアプリに追加したいと思います。最初の2つのファイルはViewControllerファイルなので、ドラッグするだけですが、他の2つはAppDelegateであり、明らかに2つのアプリデリゲートを持つことはできません。UIViewControllerただし、このサンプルアプリの場合、ファイルの.mファイルに次のコードが含まれているため、アプリデリゲートが適切なビューコントローラーとして使用されます。

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

はapplicationWillBecomeActive:などのメソッドを実装していないので、AppDelegateファイルをUIViewControllerファイルに変換するにはどうすればよいですか?Delegateの代わりにコントローラーを呼び出すために上記のコードで何を変更する必要がありますか(私の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クラスにマージする必要があるかどうかまたはどのようにマージする必要があるかを確認します。次に、これらのUIApplicationDelegateメソッドをNewName.mから削除します。これは、UIApplicationDelegateを実装した場合にのみ存在できるためです。

ViewController期待されるAppDelegateがUIApplication階層内の長期間有効なクラスであるという事実を利用しているため、その動作を複製する必要があります。NewNameこれはおそらく、ViewController.hで参照する新しいweakプロパティを作成することで最も簡単に実現できます。

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;

...

うまくいけば、これはあなたにどこから始めるべきかについての考えを与えるでしょう。

于 2012-11-11T20:46:02.430 に答える
1

私は問題を解決しました。私がしなければならなかったことは、ビューコントローラーをシングルトンにすることです。

+ (FacebookViewController *) sharedManager;

..次に、このコードを使用してアクセスします。

FacebookManager *manager = [FacebookManager sharedManager];

そして何日もの試行錯誤の末、ついに機能します!!

于 2012-11-21T16:55:53.340 に答える