xcode - 从另一个类调用方法,而不重新初始化它

标签 xcode cocoa class methods public-method

我有一个 ViewController,我在其中调用另一个类(TCP 类)的方法,在其中与服务器建立 TCP 连接,这给了我一个响应。我想,当该 TCP 类从服务器获取响应时,从 ViewController 调用另一个方法。

问题:

  1. 我是个菜鸟。
  2. 我首先初始化并分配它 TCP 上的 View Controller ,并且我的所有变量都被重置(某些东西 我不想要的)。

那么...我能做些什么来纠正它呢?我只想调用已经在内存中分配的不同类的方法。

谢谢!

最佳答案

您可以将 ViewController 设置为 TCP 类的观察者。此链接解释了 Obj-C 中观察者模式的实现。 (与我使用的非常相似,但写得很好。)

http://www.a-coding.com/2010/10/observer-pattern-in-objective-c.html

我通常也喜欢将持久层与界面分开。我使用观察者或 KVO 来通知我的业务逻辑和 View Controller 某些内容发生了变化。

如果您愿意,您还可以通过提供的通知中心发送信息...

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsnotificationcenter_Class/Reference/Reference.html

基本代码示例:

@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

希望有帮助!

关于xcode - 从另一个类调用方法,而不重新初始化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11548599/

相关文章:

ios - 如何在 ios 中的 textview 中获得不同的样式?

xcode - 重复的本地化资源文件

database - 核心数据同步

objective-c - Objective C 图片点击 Action

javascript - 具有相同类的容器具有单独的 jquery 效果

jquery - 每个 child 单独上课

ios - 避免基于框架的重叠 View

ios - iOS 安全代码设计框架,缺少 Asn1 文件?

macos - 在 Swift 中进行子类化时,如何覆盖 NSObject 的描述属性?

c++ - 将 C++ 类拆分为文件现在不会编译