我是iOS应用程序开发的新手,我陷入了无处不在的境地。这是我正面临的问题的解释。我正在尝试使用XMPPFramework和OpenFire服务器实现Instant Messaging App。 但是,我在多个视图控制器上实现XMPPRoster功能时遇到了麻烦。 在我的主AppDelegate类中,我有以下代码来初始化XMPPRoster:
MainAppDelegate.m
xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] init];
xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:xmppRosterStorage];
xmppRoster.autoFetchRoster = YES;
xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES;
xmppvCardStorage = [XMPPvCardCoreDataStorage sharedInstance];
xmppvCardTempModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:xmppvCardStorage];
xmppvCardAvatarModule = [[XMPPvCardAvatarModule alloc] initWithvCardTempModule:xmppvCardTempModule];
xmppCapabilitiesStorage = [XMPPCapabilitiesCoreDataStorage sharedInstance];
xmppCapabilities = [[XMPPCapabilities alloc] initWithCapabilitiesStorage:xmppCapabilitiesStorage];
xmppCapabilities.autoFetchHashedCapabilities = YES;
xmppCapabilities.autoFetchNonHashedCapabilities = NO;
// Activate xmpp modules
[xmppReconnect activate:xmppStream];
[xmppRoster activate:xmppStream];
[xmppvCardTempModule activate:xmppStream];
[xmppvCardAvatarModule activate:xmppStream];
[xmppCapabilities activate:xmppStream];
// Add ourself as a delegate to anything we may be interested in
[xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
[xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];
allowSelfSignedCertificates = NO;
allowSSLHostNameMismatch = NO;
然后在同一个 MainAppDelegate.m 文件中,我使用以下代码将用户注册到名单:
[xmppRoster acceptPresenceSubscriptionRequestFrom:[tmpPresence from] andAddToRoster:YES];
到目前为止,整个代码工作正常。但是,接下来我尝试使用 XYZViewController.m 文件中的以下代码调用XMPPRoster subscribePresenceToUser函数:
[xmppRoster subscribePresenceToUser:(XMPPJID *)friendID];
我面临的问题是我是否需要在XYZViewController.m中创建一个新的XMPPRoster对象实例化,或者是否有办法重用我已在 MainAppDelegate.m 中使用的xmppRoster即时文件(即,可能正在传递此对象或其他东西)?
我已经在 XYZViewController.m :
中尝试了以下内容 MainAppDelegate *myappdelegate = [[MainAppDelegate alloc] init];
[myappdelegate.xmppRoster subscribePresenceToUser:(XMPPJID *)friendID];
但是,看起来XMPPRoster类中的 subscribePresenceToUser 函数甚至都没有被调用。我通过在 subscribePresenceToUser 函数中插入几个NSLog来测试它。我对此完全无能为力。任何帮助将受到高度赞赏。谢谢。