如何从多视图控制器类访问XMPPRoster?

时间:2013-12-29 07:24:07

标签: ios objective-c xmppframework

我是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来测试它。我对此完全无能为力。任何帮助将受到高度赞赏。谢谢。

0 个答案:

没有答案