我正在使用xcode 4.5从此link.am下载示例项目 http://mobile.tutsplus.com/tutorials/iphone/building-a-jabber-client-for-ios-interface-setup/
无法编译。框架丢失。所以我下载了框架工作 这个链接...... https://github.com/robbiehanson/XMPPFramework ... filnaly我能够编译。
然后我添加我的主机名setupStream
-(void)setupStream {
NSLog(@"setupStream");
xmppStream = [[[XMPPStream alloc] init]autorelease];
xmppStream.hostName=@"talk.google.com";
//xmppStream.hostPort=5222;
[xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
}
但什么都不会发生......委托方法
-(void)xmppStreamDidConnect:(XMPPStream *)sender {
NSLog(@"didReceiveMessage");
isOpen = YES; NSError *error = nil;
[[self xmppStream] authenticateWithPassword:password error:&error];
}
-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender {
NSLog(@"didReceiveMessage");
[self goOnline];
}
没有被叫。什么是失踪。请帮助我..
答案 0 :(得分:2)
最有可能的问题是,您的类实例(即XMPPStream的委托)是在调用委托方法之前发布的。通过将此类作为其他类的属性或实例变量或使用dispatch_once使其更具持久性。例如,
更改
YourClass *instance = [[YourClass alloc] init];
instance.xmppStream = ....
通过
@property(nonatomic, strong) YourClass *instance;
self.instance = [[YourClass alloc] init];
self.instance.xmppStream = ....
这里YourClass包含XMPPStream并且是它的委托。
我写了一篇关于这个问题的大博文。这是非常常见的情况。 http://blog.alwawee.com/2013/07/31/on-xmppframework-delegate-method-not-being-called/
答案 1 :(得分:1)
准备好后,您可以开始连接过程:
NSError *error = nil;
if (![xmppStream connect:&error])
{
NSLog(@"Oops, I probably forgot something: %@", error);
}
由于您没有执行任何操作,因此不会调用委托方法。根据{{1}}实现,您很可能会遇到大量内存问题,在某处添加对已分配对象的保留引用。