アプリとプロトコルに問題があります。画像を投稿できません (...) が、ストーリーボードに 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 が利用不可になりますが、対応するデリゲート関数テーブルビューコントローラーでは呼び出されません。どうして??
デリゲートとプロトコル パターンの使用に何か問題がありますか?