2015-12-13 4 views
1

Я создаю приложение, которое будет использовать PubNub для части группового чата приложения. Я включил Playback в своем приложении, и я закончил учебник по настройке кода. Я запутался, потому что весь код был в AppDelegate, и у меня есть контроллер просмотра чата как часть моей раскадровки. Мой вопрос в том, какой код установки мне нужно сделать в контроллере просмотра, поэтому я могу получить все последние 100 сообщений, используя метод historyForChannel:start:end:limit:withCompletion:. Должен ли я создать новый экземпляр PubNub-клиента? Это не имеет смысла, поскольку пользователь будет переключать контроллеры представлений и должен храниться в ресурсе длительного срока службы.PubNub и контроллеры множественного просмотра

Какой код установки мне нужно сделать в контроллерах моего представления, чтобы получать последние сообщения? (Для загрузки в очень сложную настройку таблицы)

+0

Ничего себе, поскольку я разместил это объявление, которое появилось, было в реальном времени для платформы приложений/api. Существует так много! – Minebomber

+1

Определенно много вариантов, но никто не приближается к PubNub - конечно, я предвзятый, но это не значит, что я не прав;) Следите за ответами на свои вопросы. –

ответ

2

Итак, я выяснил, какое рабочее решение. Во-первых, вы должны сделать публичное свойство 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 для обработки уведомлений.