0

アプリとプロトコルに問題があります。画像を投稿できません (...) が、ストーリーボードに 2 つのコントローラーが含まれています。1 つ目は、UIButton を備えたメイン メニュー コントローラーです。ユーザーがボタンを押すと、「使用可能なサーバー コントローラー」というコントローラーを含むテーブル ビューが表示されます。

さて、メインメニューコントローラーは次のプロトコルを公開します:

#import <UIKit/UIKit.h>
#import "Client.h"
#import "MyRstAaAppDelegate.h"

@class MyRstAaClientViewController;

@protocol ClientNetworkDelegate <NSObject>
-(void)serverBecameAvaiable:(NSString *)peerID;
-(void)serverBecameUnavailable:(NSString *)peerID;
-(void)didConnectToServer:(NSString *)peerID;
-(void)didDisconnectFromServer:(NSString *)peerID;
@end

@interface MyRstAaClientViewController : UIViewController <ClientDelegate>

#pragma PROPERTIES
//Delegate property
@property (nonatomic, weak) id<ClientNetworkDelegate> delegate;

@end

また、Available Server Table ビュー コントローラーは、プロトコルのメソッドを実装してテーブル データをリロードし、その他のことを行います。これはそのコードです:

#import <UIKit/UIKit.h>
#import "MyRstAaClientViewController.h"

@interface MyRstAaClientServerListTableViewController : UITableViewController <ClientNetworkDelegate>

@end

... ... ...

そして、.m

#import "MyRstAaClientServerListTableViewController.h"

@interface MyRstAaClientServerListTableViewController ()

//Client shared istance
@property (nonatomic, strong) Client *client;
@property (nonatomic, strong) MyRstAaClientViewController *mainController;
@end

@implementation MyRstAaClientServerListTableViewController

#pragma PROPERTIES
@synthesize client = _client;
@synthesize mainController = _mainController;

#pragma INITIALIZATION FUNCTIONS
- (void)viewDidLoad
{
    [super viewDidLoad];
    MyRstAaAppDelegate *appDelegate = (MyRstAaAppDelegate *)[[UIApplication sharedApplication]delegate];
    self.client = appDelegate.client;

    if(_mainController == nil)
        _mainController = [[MyRstAaClientViewController alloc]init];
    [self.mainController setDelegate:self];

    [self.tableView reloadData];
}

#pragma DELEGATES
-(void)serverBecameAvaiable:(NSString *)peerID;
{
    //Reload table data
    [self.tableView reloadData];

#ifdef DEBUG
    NSLog(@"CLIENT-SERVERLIST:: Server become Available");
#endif
}
-(void)serverBecameUnavailable:(NSString *)peerID;
{
    //Reload table data
    [self.tableView reloadData];

    #ifdef DEBUG
    NSLog(@"CLIENT-SERVERLIST:: Server become unavaiable");
    #endif
}
- (void)didConnectToServer:(NSString *)peerID
{
    #ifdef DEBUG
    NSLog(@"CLIENT-SERVERLIST:: Server become Available");
    #endif
}
- (void)didDisconnectFromServer:(NSString *)peerID
{
    #ifdef DEBUG
    NSLog(@"CLIENT-SERVERLIST:: did Disconnect From Server");
    #endif
}

これは、アプリの MainMenu コントローラーの .m ファイルでのデリゲート呼び出しの例です

#import "MyRstAaClientViewController.h"

@interface MyRstAaClientViewController ()

@property (nonatomic, strong) Client *client;

@end

@implementation MyRstAaClientViewController

#pragma PROPERTIES
@synthesize client = _client;
@synthesize delegate = _delegate;

-(void)Client:(Client *)client serverBecameUnavailable:(NSString *)peerID
{
#ifdef DEBUG
    NSLog(@"CLIENT-HOME:: Server become unavaiable");
#endif

    //Call delegate methodå
    [self.delegate serverBecameUnavailable:peerID];
}

問題は、iPhone でアプリを実行し、「利用可能なサーバー」リスト ビューに移動すると、出力に次のような文字列が表示されることです: CLIENT-HOME:: Server が利用不可になりますが、対応するデリゲート関数テーブルビューコントローラーでは呼び出されません。どうして??

デリゲートとプロトコル パターンの使用に何か問題がありますか?

4

0 に答える 0