同様の質問の投稿 (これは機能しません) に続いて、AppDelegate.h で GCDAsyncSocket のインスタンスを宣言しました。
#import <UIKit/UIKit.h>
@class ViewController;
@class GCDAsyncSocket;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
GCDAsyncSocket *asyncSocket;
}
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, retain) GCDAsyncSocket *asyncSocket;
@property (strong, nonatomic) ViewController *viewController;
@end
AppDelegate.m でソケットの初期化を行います。
#import "AppDelegate.h"
#import "GCDAsyncSocket.h"
#import "ViewController.h"
@implementation AppDelegate
@synthesize asyncSocket;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
dispatch_queue_t mainQueue = dispatch_get_main_queue();
self.asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:mainQueue];
NSString *host = @"10.1.100.50";
uint16_t port = 3040;
NSError *error = nil;
if (![self.asyncSocket connectToHost:host onPort:port error:&error])
{
NSLog(@"Error connecting: %@", error);
}
char bytes[] = "run";
NSData* requestData = [[NSData alloc] initWithBytes:bytes length:sizeof(bytes)];
[self.asyncSocket writeData:requestData withTimeout:-1 tag:0];
return YES;
}
次を呼び出して、複数のView Controllerからソケットにアクセスしようとしました:
GCDAsyncSocket *asyncSocket = [[[UIApplication sharedApplication] delegate] asyncSocket];
コード補完は、asyncSocket を提案できずに [[UIApplication sharedApplication] delegate] で停止します。asyncSocket のインスタンスが AppDelegate で宣言されている場合、複数のビュー コントローラーで asyncSocket にアクセスできるようにするにはどうすればよいですか? ありがとう!
これが私のXcodeプロジェクトファイルです: http://bit.ly/PLe1Le