我正在创建一个应用程序,它将使用PubNub作为应用程序的群聊部分。我在我的应用上打开了Playback
,我完成了设置代码的教程。我很困惑,因为所有代码都在AppDelegate
,我的聊天视图控制器是我的故事板的一部分。我的问题是,我必须在视图控制器中执行哪些设置代码,以便使用historyForChannel:start:end:limit:withCompletion:
方法获取所有过去100条消息。我是否必须创建PubNub客户端的新实例?这是没有意义的,因为用户将切换视图控制器,它应存储在长寿命属性中。
我需要在视图控制器中使用哪些设置代码来获取过去的消息? (要加载到非常详细的tableview设置中)
答案 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
中的#import
或AppDelegate
更喜欢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
来处理通知。