Objective c 全局套接字启动(异步套接字)
我正在尝试从另一个类(而不是“ApplicationIDFinishLaunching”中)启动套接字,因此,在AppDelegate.m中,我调用该类netClass:Objective c 全局套接字启动(异步套接字),objective-c,cocoa,asyncsocket,Objective C,Cocoa,Asyncsocket,我正在尝试从另一个类(而不是“ApplicationIDFinishLaunching”中)启动套接字,因此,在AppDelegate.m中,我调用该类netClass: - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { netClass *network = [[netClass alloc] init]; [network startNet]; } 在netClass中,方法sta
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
netClass *network = [[netClass alloc] init];
[network startNet];
}
在netClass中,方法startNet正常启动套接字:
- (void)startNet
{
[DDLog addLogger:[DDTTYLogger sharedInstance]];
...
[netService publish];
}
但是netClass中的asyncSocket方法,如“didAcceptNewSocket”、“socketDidDisconnect”、“NetServicedPublish”,没有被调用
你知道怎么称呼它吗
任何帮助都将不胜感激:-)您需要通过向您的NSNetService对象发送
setDelegate:
消息来设置委托--从您发布的代码来看,这就像是“netService
”([netService setDelegate:self];
)
将“
nsapplicationelegate、NSNetServiceDelegate、GCDAsyncSocketDelegate
”放在.h文件中不会设置委托,它基本上只是让编译器知道您打算实现这些协议的方法。另外,您不应该有nsapplicationelegate
,因为您已经有了一个应用程序委托。您需要通过向任何NSNetService对象发送setDelegate:
消息来设置委托,这与您发布的代码类似,即“netService
”([netService setDelegate:self];
)
将“
nsapplicationelegate、NSNetServiceDelegate、GCDAsyncSocketDelegate
”放在.h文件中不会设置委托,它基本上只是让编译器知道您打算实现这些协议的方法。另外,您不应该在那里有nsapplicationelegate
,因为您已经有了一个应用程序委派。什么是netClass
?很可能您没有设置委托。netClass
是我创建的另一个类,用于启动连接和处理委托方法。在.h文件中,我设置了委托,如NSObject
,但它不起作用。有什么想法吗,斯蒂芬?@Alberto:这并不是设定代表;这意味着该类的实例可以是这些类型的委托。声明任何实例都可以是某些类型对象的委托并不意味着特定实例实际上是其他特定对象的委托。@PeterHosey,对不起,实际上,我还添加了[netService setDelegate:self]代码>,但它不工作!不可思议的奇怪!什么是netClass
?很可能您没有设置委托。netClass
是我创建的另一个类,用于启动连接和处理委托方法。在.h文件中,我设置了委托,如NSObject
,但它不起作用。有什么想法吗,斯蒂芬?@Alberto:这并不是设定代表;这意味着该类的实例可以是这些类型的委托。声明任何实例都可以是某些类型对象的委托并不意味着特定实例实际上是其他特定对象的委托。@PeterHosey,对不起,实际上,我还添加了[netService setDelegate:self]代码>,但它不工作!不可思议的奇怪!这就是为什么它很有趣:在AppDelegate中,我不需要设置它([netService setDelegate:self];
,它可以正常工作,调用委托方法,在我的类(netClass)中,甚至放置setDelegate
它也不工作!PS:NSApplicationedLegate
已删除。-@Alberto:NSNetService不能被删除“调用委托方法”不是其委托的对象。如果您指的是NSApplicationedLegate方法,则这些方法是不相关的:NSApplicationedLegate将NSApplicationedLegate协议中列出的消息发送给其委托,NSNetService将NSNetServiceDelegate协议中列出的消息发送给其委托。请确保“netClass
”(需要更好的名称)实例实际上创建了NSNetService。实际上,它被称为JSNetwork,netClass只是为了简化它。:-D.我错了:在AppDelegateApplicationIDfini[…]
中,我调用[netService setDelegate:self];
,但从“netClass”调用它”它不起作用。它真的很奇怪:相同的代码,相同的委托,相同的方法,不同的操作。我会在互联网上看得更清楚。如果我发现任何真正相关的东西,我会把它贴在这里。谢谢,@PeterHosey@Alberto:你把NSNetServiceDelegate方法放在哪一类?如果你没有看到更多的代码,很难说现在该怎么做JSNetwork类。您是否接受[netService setDelegate:self]应用程序委托之外?你不能有两个对象作为某个对象的委托,它应该只在JSNetwork类中。但我不确定setDelegate消息是否应该发送到netService,因为你没有显示该类的代码。这就是为什么它很有趣:在AppDelegate中,我不需要设置它([netService setDelegate:self];
,它可以正常工作,调用委托方法,在我的类(netClass)中,甚至放置setDelegate
它也不工作!PS:NapplicationDelegate
已删除。-@Alberto:NSNetService不能“调用委托方法”如果您指的是NSApplicationDelegate方法,则这些方法是不相关的:NSApplicationDelegate将NSApplicationDelegate协议中列出的消息发送给其委托,而NSNetService将NSNetServiceDelegate协议中列出的消息发送给其委托。请确保“netClass
”(这确实需要一个更好的名称)实例实际上创建了NSNetService。实际上,它被称为JSNetwork,netClass只是为了让它变得简单。:-D.我错了:在AppDelegateApplicationIDfini[…]
中,我调用[netService setDelegate:self];
,但从“netClass”调用它它不起作用。它真的很奇怪:相同的代码,相同的委托,相同的方法,不同的操作。我会在互联网上看得更清楚。如果我发现什么真的很奇怪