PubNub и несколько контроллеров представления
Я делаю приложение, которое будет использовать PubNub для части приложения в групповом чате. Я включил Playback
в моем приложении, и я закончил учебник по настройке кода. Я в замешательстве, хотя, потому что весь код был в AppDelegate
и у меня есть мой контроллер просмотра чата как часть моей раскадровки. Мой вопрос заключается в том, какой код настройки мне нужно сделать в моем контроллере представления, чтобы я мог получить все последние 100 сообщений, используя historyForChannel:start:end:limit:withCompletion:
метод. Должен ли я сделать новый экземпляр клиента PubNub? Это не имеет смысла, так как пользователь будет переключать контроллеры представления, и он должен храниться в свойстве с длительным сроком службы.
Какой код настройки мне нужно сделать в моих контроллерах представления, чтобы получить прошлые сообщения? (Быть загруженным в очень сложную установку просмотра таблицы)
1 ответ
Итак, я разобрался с рабочим решением. Во-первых, вы должны сделать свойство клиента PubNub общедоступным, определив его в AppDelegate.h
файл, а не .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>
от AppDelegate.h
а также [self.pnClient addListener:self];
от твоего AppDelegate.m
, Если вы предпочитаете сохранить его, просто не удаляйте этот материал.
Сейчас, #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
вашего приложения делегировать вашему "временному" клиенту в вашем контроллере представления. (Посмотрите, почему мы перенесли AppDelegate
клиент для.h?) И наконец, он добавляет себя в качестве слушателя, так что вы можете делать вещи в вашем контроллере представления.
Вот и все!
Я бы предложил использовать ваш чат-контроллер для заполнения UITableView или чего-то еще, и AppDelegate
для обработки уведомлений.