代表不在单身工作

为了通过多个视图build立networking连接,我创build了一个Singletonnetworking控制器来处理服务器和客户端之间的数据。 不幸的是,它不工作,因为委托方法不是从我的单身人士调用到另一个视图..在我的代码下面:

**单例是SocketIOConnection.h和.m

// // SocketIOConnection.h #import <Foundation/Foundation.h> #import "SocketIO.h" #import "SocketIOPacket.h" @protocol SocketIOConnectionDelegate <NSObject> @required - (void) receivedPacket:(id)packet; @end @interface SocketIOConnection : NSObject <SocketIODelegate> { SocketIO *IO; id <SocketIOConnectionDelegate> delegate; } @property (nonatomic, retain) IBOutlet SocketIO *IO; @property (retain) id <SocketIOConnectionDelegate> delegate; + (SocketIOConnection *)sharedSingleton; @end // // SocketIOConnection.m #import "SocketIOConnection.h" @implementation SocketIOConnection @synthesize IO, delegate; static SocketIOConnection *shared = NULL; -(id)init { if (self = [super init]) { IO = [[SocketIO alloc] initWithDelegate:self]; [IO connectToHost:@"domain.com" onPort:443]; } return self; } + (SocketIOConnection *)sharedSingleton { @synchronized(shared) { if ( !shared || shared == NULL ) { // allocate the shared instance, because it hasn't been done yet shared = [[SocketIOConnection alloc] init]; } return shared; } } -(void)socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet { NSLog(@"Delegating received packet.."); [delegate receivedPacket:packet.dataAsJSON]; } @end 

所以这是我的单身人士的代码,下面我会发布我的viewcontroller.h和.m的代码

 // // ViewController.h #import <UIKit/UIKit.h> #import "MBProgressHUD.h" #import "SocketIOConnection.h" @interface ViewController : UIViewController <MBProgressHUDDelegate, SocketIOConnectionDelegate> { MBProgressHUD *HUD; } @property (nonatomic, retain) SocketIOConnection *IOConnection; @end // // ViewController.m #import "ViewController.h" @interface ViewController () @end @implementation ViewController { NSDictionary *operatorData; } @synthesize SESSION, IOConnection; #pragma mark - view Did Load, View Will Appear & didReceiveMemoryWarning - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } -(void)viewWillAppear:(BOOL)animated { IOConnection = [SocketIOConnection sharedSingleton]; // fire auth function to verify the operator and sign him in. NSMutableDictionary *tokenAndLicense = [[NSMutableDictionary alloc] init]; [tokenAndLicense setValue:[operatorData objectForKey:@"token"] forKey:@"__ca.token"]; [tokenAndLicense setValue:[operatorData objectForKey:@"license"] forKey:@"__ca.license"]; [IOConnection.IO sendEvent:@"auth" withData:tokenAndLicense]; } -(void)receivedPacket:(id)packet { <<<< void that should be fired because of the delegate NSLog(@"Receive ieks.."); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 

为什么我的委托方法没有被调用?

看起来你已经忘记了在代码中设置委托。 在视图控制器的ViewWillAppear调用单例之后,您应该先执行此ViewWillAppear

 -(void)viewWillAppear:(BOOL)animated { IOConnection = [SocketIOConnection sharedSingleton]; IOConnection.delegate = self; // fire auth function to verify the operator and sign him in. NSMutableDictionary *tokenAndLicense = [[NSMutableDictionary alloc] init]; [tokenAndLicense setValue:[operatorData objectForKey:@"token"] forKey:@"__ca.token"]; [tokenAndLicense setValue:[operatorData objectForKey:@"license"] forKey:@"__ca.license"]; [IOConnection.IO sendEvent:@"auth" withData:tokenAndLicense]; }