Итак, я выяснил, какое рабочее решение. Во-первых, вы должны сделать публичное свойство 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
для обработки уведомлений.
Ничего себе, поскольку я разместил это объявление, которое появилось, было в реальном времени для платформы приложений/api. Существует так много! – Minebomber
Определенно много вариантов, но никто не приближается к PubNub - конечно, я предвзятый, но это не значит, что я не прав;) Следите за ответами на свои вопросы. –