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 для обработки уведомлений.

Другие вопросы по тегам