Xcode 如何使AppDelegate中声明的GCDAsyncSocket可用于查看控制器
在一篇类似问题的帖子之后(这不起作用),我在AppDelegate.h上声明了GCDAsyncSocket的一个实例Xcode 如何使AppDelegate中声明的GCDAsyncSocket可用于查看控制器,xcode,ios5,gcdasyncsocket,appdelegate,Xcode,Ios5,Gcdasyncsocket,Appdelegate,在一篇类似问题的帖子之后(这不起作用),我在AppDelegate.h上声明了GCDAsyncSocket的一个实例 #import <UIKit/UIKit.h> @class ViewController; @class GCDAsyncSocket; @interface AppDelegate : UIResponder <UIApplicationDelegate> { GCDAsyncSocket *asyncSocket; } @proper
#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
我试图通过调用以下命令从多个视图控制器访问套接字:
GCDAsyncSocket *asyncSocket = [[[UIApplication sharedApplication] delegate] asyncSocket];
代码完成在[[UIApplication sharedApplication]委托]处停止,但无法建议使用asyncSocket。
在AppDelegate中声明asyncSocket实例时,我应该如何使asyncSocket在多个视图控制器中可访问?谢谢
这是我的Xcode项目文件:您走对了方向。应用程序委托是套接字连接的好地方。我想你被一些相对简单的事情绊倒了
[[UIApplication sharedApplication]委托]
返回一个id
或通用对象指针,指向符合
协议的对象。因此,代码完成无法知道应用程序的委托是AppDelegate
类的实例
请记住,如果您实际上正在使用AppDelegate
的实例作为应用程序的委托,则[[UIApplication sharedApplication]委托]
将返回指向委托的指针,但它将是上面讨论的通用指针
最简单的解决方案是将从[[UIApplication sharedApplication]delegate]
收到的指针转换为AppDelegate
类型的指针
例如:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
// We now have a pointer to your app delegate that the compiler knows is an AppDelegate.
// So code completion will work and it will compile.
GCDAsyncSocket *socket = [myAppDelegate asyncSocket];
也可以将调用堆叠到一个语句。语法看起来有点古怪,但就是这样做的
GCDAsyncSocket *socket = [(AppDelegate *)[[UIApplication sharedApplication] delegate] asyncSocket];
GCDAsyncSocket *socket = [(AppDelegate *)[[UIApplication sharedApplication] delegate] asyncSocket];