PubNub 和多视图控制器
PubNub and Multiple View Controllers
我正在制作一个应用程序,它将使用 PubNub 作为应用程序的群聊部分。我在我的应用程序上打开了 Playback
,并完成了设置代码的教程。不过我很困惑,因为所有代码都在 AppDelegate
中,并且我将聊天视图控制器作为故事板的一部分。我的问题是,我必须在我的视图控制器中执行哪些设置代码,以便我可以使用 historyForChannel:start:end:limit:withCompletion:
方法获取所有过去的 100 条消息。我必须创建一个新的 PubNub 客户端实例吗?这没有意义,因为用户将切换视图控制器并且它应该长期存储 属性。
我必须在视图控制器中执行哪些设置代码才能获取过去的消息? (要加载到非常精细的表格视图设置中)
所以我想出了一个可行的解决方案。首先,您必须通过在 AppDelegate.h
文件中定义 PubNub 客户端 属性 public,而不是 .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]
属性 的侦听器。如果没有,只需删除 AppDelegate.h
中的 <PNObjectEventListener>
和 AppDelegate.m
中的 [self.pnClient addListener:self];
。如果您想保留它,请不要删除它。
现在,#import
你的 AppDelegate
在你的 ChatViewController.h
或你喜欢的 .m
中。然后,使您的 .h
符合 <PNObjectEventListener>
委托。然后,在您忘记之前,在您的 .h
或 .m
中添加另一个客户端,以将您的 PubNub 客户端的 属性 存储在您的 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
(因此不涉及共享实例或单例)。然后,它将您的应用程序委托的 pnClient
设置为您的视图控制器中的 "temporary" 客户端。 (明白为什么我们将 AppDelegate
的客户端移动到 .h 了吗?)最后,它将 self 添加为侦听器,因此您可以在视图控制器中执行操作。
仅此而已!
我建议使用您的聊天控制器来填充 UITableView 或其他东西,并使用 AppDelegate
来处理通知。
我正在制作一个应用程序,它将使用 PubNub 作为应用程序的群聊部分。我在我的应用程序上打开了 Playback
,并完成了设置代码的教程。不过我很困惑,因为所有代码都在 AppDelegate
中,并且我将聊天视图控制器作为故事板的一部分。我的问题是,我必须在我的视图控制器中执行哪些设置代码,以便我可以使用 historyForChannel:start:end:limit:withCompletion:
方法获取所有过去的 100 条消息。我必须创建一个新的 PubNub 客户端实例吗?这没有意义,因为用户将切换视图控制器并且它应该长期存储 属性。
我必须在视图控制器中执行哪些设置代码才能获取过去的消息? (要加载到非常精细的表格视图设置中)
所以我想出了一个可行的解决方案。首先,您必须通过在 AppDelegate.h
文件中定义 PubNub 客户端 属性 public,而不是 .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]
属性 的侦听器。如果没有,只需删除 AppDelegate.h
中的 <PNObjectEventListener>
和 AppDelegate.m
中的 [self.pnClient addListener:self];
。如果您想保留它,请不要删除它。
现在,#import
你的 AppDelegate
在你的 ChatViewController.h
或你喜欢的 .m
中。然后,使您的 .h
符合 <PNObjectEventListener>
委托。然后,在您忘记之前,在您的 .h
或 .m
中添加另一个客户端,以将您的 PubNub 客户端的 属性 存储在您的 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
(因此不涉及共享实例或单例)。然后,它将您的应用程序委托的 pnClient
设置为您的视图控制器中的 "temporary" 客户端。 (明白为什么我们将 AppDelegate
的客户端移动到 .h 了吗?)最后,它将 self 添加为侦听器,因此您可以在视图控制器中执行操作。
仅此而已!
我建议使用您的聊天控制器来填充 UITableView 或其他东西,并使用 AppDelegate
来处理通知。