0

xcode 4.5 http://mobile.tutsplus.com/tutorials/iphone/building-a-jabber-client-for-ios-interface-setup/を使用して、この link.am からサンプル プロジェクトをダウンロードしています。

フレームワークが見つからなかったので、このリンクからフレームワークをダウンロードしました... 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];
}

は呼び出されていません。何が欠けていますか。助けてください..

4

2 に答える 2

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/

于 2013-07-31T04:03:41.527 に答える
1

接続中

準備ができたら、接続プロセスを開始できます。

NSError *error = nil;
if (![xmppStream connect:&error])
{
    NSLog(@"Oops, I probably forgot something: %@", error);
}

何もしていないので、デリゲート メソッドは呼び出されません。実装によってはXMPPStream、大量のメモリの問題が発生する可能性が高く、割り当てられたオブジェクトへの保持された参照をどこかに追加します。

于 2013-06-11T15:06:02.960 に答える