我有一个ViewController,我从另一个类(TCP类)调用一个方法,在那里我建立到服务器的TCP连接,给了我一个响应。我想,当那个TCP类获得来自服务器的响应时,从ViewController调用另一个方法。从另一个类调用方法,而不重新初始化
问题:
- 我是小白。
- 我正在初始化并在TCP上分配第一个 Viewcontroller,并且所有的变量都被重置(我不想要的东西 )。
那么...我能做些什么才能使它正确?我只想从另一个类中调用一个已经在内存中分配的方法。
Tks!
我有一个ViewController,我从另一个类(TCP类)调用一个方法,在那里我建立到服务器的TCP连接,给了我一个响应。我想,当那个TCP类获得来自服务器的响应时,从ViewController调用另一个方法。从另一个类调用方法,而不重新初始化
问题:
那么...我能做些什么才能使它正确?我只想从另一个类中调用一个已经在内存中分配的方法。
Tks!
您可以将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
希望帮助!
Tks很多人。所以我必须让我的ViewController成为TCP类的观察者。这意味着来自TCP类的所有方法都可以从VC访问? – 88fsantos 2012-07-18 19:24:03
使用观察者模式,您正在定义一个接口并保证所有观察者都具有此接口。传统上这是一个notify()方法。当通知被调用时,你可以调用你需要的任何函数。这允许视图控制器在来自TCP连接的回调中被事件驱动。您当然也可以通过TCP类指向ViewController的指针,然后在获得回调后调用ViewController上的特定函数,但Observer模式更清晰,可以更好地扩展(您可以将它用于所有视图控制器)并松散地再加。 – Kibitz503 2012-07-18 19:27:20
所以要更直接地回答你的问题......不能。它将能够看到所有的TCP类公共方法。 (我假设视图控制器正在创建TCP类)订阅和取消订阅的方法需要公开才能使用它们。 – Kibitz503 2012-07-18 19:51:52