PubNub和多视图控制器

时间:2015-12-13 23:35:02

标签: ios objective-c real-time pubnub livechat

我正在创建一个应用程序,它将使用PubNub作为应用程序的群聊部分。我在我的应用上打开了Playback,我完成了设置代码的教程。我很困惑,因为所有代码都在AppDelegate,我的聊天视图控制器是我的故事板的一部分。我的问题是,我必须在视图控制器中执行哪些设置代码,以便使用historyForChannel:start:end:limit:withCompletion:方法获取所有过去100条消息。我是否必须创建PubNub客户端的新实例?这是没有意义的,因为用户将切换视图控制器,它应存储在长寿命属性中。

我需要在视图控制器中使用哪些设置代码来获取过去的消息? (要加载到非常详细的tableview设置中)

1 个答案:

答案 0 :(得分:2)

所以我想出了一个有效的解决方案。首先,您必须通过在AppDelegate.h文件中定义PubNub客户端属性,而不是.m实现来公开它。

// AppDelegate.h
#import <UIKit/UIKit.h>
#import <PubNub/PubNub.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate, PNObjectEventListener>

@property (strong, nonatomic) UIWindow *window;

// Stores reference on PubNub client to make sure what it won't be released.
@property (nonatomic) PubNub *pnClient;

@end

不要忘记从AppDelegate.m

中删除
#import "AppDelegate.h"

@interface AppDelegate ()
/*
// Stores reference on PubNub client to make sure what it won't be released.
@property (nonatomic) PubNub *pnClient;    
*/ // Delete from here
@end

@implementation AppDelegate

如果您想要发送通知等,请将AppDelegate作为[self.pnClient]属性的监听器。如果没有,只需从您<PNObjectEventListener>的{​​{1}}和AppDelegate.h中删除[self.pnClient addListener:self];即可。如果您愿意保留它,请不要删除它们。

现在,您AppDelegate.m中的#importAppDelegate更喜欢ChatViewController.h。然后,让.m符合.h代表。在您忘记之前,在<PNObjectEventListener>.h中添加另一个客户,以便将您的PubNub客户端的属性存储在.m中。 :

AppDelegate

接下来,在您的// Stores reference on PubNub client to make sure what it won't be released. @property (nonatomic) PubNub *pnClient; 方法中,添加:

viewDidLoad

此代码首先获取应用的AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; self.pnClient = appDelegate.pnClient; [self.pnClient addListener:self]; ,(因此不涉及共享实例或单例事物)。然后,它会将您的应用委托的AppDelegate设置为您的&#34;临时&#34;视图控制器中的客户端。 (看看为什么我们将pnClient的客户端移动到.h?)最后,它将self添加为监听器,因此您可以在视图控制器中执行操作。

这就是它的全部内容!

我建议您使用聊天控制器填充UITableView或其他内容,并使用AppDelegate来处理通知。