我有同样的问题,这是我的解决方案:
在 XMPPRoom 方法中
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
代替
[responseTracker removeAllIDs];
和:
if ([x elementForName:@"destroy"]) {
NSArray *allKeys = [responseTracker allIDs];
for (NSString *key in allKeys) {
SEL aSel = [responseTracker selectorForElementID:key];
if (aSel != @selector(handleDestroyRoomResponse:withInfo:)) {
[responseTracker removeID:key];
}
}
} else {
[responseTracker removeAllIDs];
}
在 XMPPIDTracker.h 中添加新公共方法的声明
- (NSArray *)allIDs;
- (SEL)selectorForElementID:(NSString *)elementID;
同样在 XMPPBasicTrackingInfo 接口中添加
@property (nonatomic, readonly) SEL selector;
在 XMPPIDTracker.m 添加两个公共方法
- (NSArray *)allIDs {
return [dict allKeys];
}
- (SEL)selectorForElementID:(NSString *)elementID {
id <XMPPTrackingInfo> info = [dict objectForKey:elementID];
if ([info isKindOfClass:[XMPPBasicTrackingInfo class]]) {
return [(XMPPBasicTrackingInfo *)info selector];
}
return nil;
}
在@implementation XMPPBasicTrackingInfo 的末尾添加
@synthesize selector;
基本上,这段代码删除了除了 handleDestroyRoomResponse:withInfo: 之外的所有响应跟踪器,因为我们需要这个处理程序来响应 IQ 销毁节。
我希望这将有所帮助。