我有一个 ViewController,我在其中调用另一个类(TCP 类)的方法,在那里我与服务器建立 TCP 连接,这给了我一个响应。我想,当那个 TCP 类从服务器获取响应时,从 ViewController 调用另一个方法。
问题:
- 我是菜鸟。
- 我正在 TCP 上初始化并分配第一个 Viewcontroller,并且我的所有变量都被重置(这是我不想要的)。
所以...我该怎么做才能使它正确?我只想调用一个已经在内存中分配的不同类的方法。
谢!
我有一个 ViewController,我在其中调用另一个类(TCP 类)的方法,在那里我与服务器建立 TCP 连接,这给了我一个响应。我想,当那个 TCP 类从服务器获取响应时,从 ViewController 调用另一个方法。
问题:
所以...我该怎么做才能使它正确?我只想调用一个已经在内存中分配的不同类的方法。
谢!
您可以将 ViewController 设置为 TCP 类的观察者。这是一个解释 Obj-C 中观察者模式实现的链接。(与我使用的非常相似,但写得很好。)
http://www.a-coding.com/2010/10/observer-pattern-in-objective-c.html
我通常也喜欢将持久层与接口分开。我使用观察者或 KVO 来通知我的业务逻辑并查看控制器发生了一些变化。
如果您愿意,也可以通过提供的通知中心发送信息...
基本代码示例:
@implementation ExampleViewController
//...
- (void)viewDidLoad
{
[super viewDidLoad:animated];
[TCPClass subscribeObserver:self];
}
- (void)viewDidUnload
{
[super viewDidUnload:animated];
[TCPClass unsubscribeObserver:self];
}
- (void)notifySuccess:(NSString*)input
{
//Do whatever I needed to do on success
}
//...
@end
@implementation TCPClass
//...
//Call this function when your TCP class gets its callback saying its done
- (void)notifySuccess:(NSString*)input
{
for( id<Observer> observer in [NSMutableArray arrayWithArray:observerList] )
{
[(NSObject*)observer performSelectorOnMainThread:@selector(notifySuccess:) withObject:input waitUntilDone:YES];
}
}
//maintain a list of classes that observe this one
- (void)subscribeObserver:(id<Observer>)input {
@synchronized(observerList)
{
if ([observerList indexOfObject:input] == NSNotFound) {
[observerList addObject:input];
}
}
}
- (void)unsubscribeObserver:(id<Observer>)input {
@synchronized(observerList)
{
[observerList removeObject:input];
}
}
//...
@end
//Observer.h
//all observers must inherit this interface
@protocol Observer
- (void)notifySuccess:(NSString*)input;
@end
希望有帮助!