1

別のクラス (TCP クラス) からメソッドを呼び出す ViewController があります。ここで、サーバーへの TCP 接続を作成し、応答を返します。そして、そのTCPクラスがサーバーからの応答を取得したら、ViewControllerから別のメソッドを呼び出したいと思います。

問題:

  1. 私は初心者です。
  2. TCPで最初のViewcontrollerを初期化して割り当てていますが、すべての変数がリセットされています(これは望ましくありません)。

それで... 正しくするにはどうすればよいですか? 既にメモリに割り当てられている別のクラスからメソッドを呼び出したいだけです。

わかりました!

4

1 に答える 1

1

ViewController を TCP クラスのオブザーバーとして設定できます。これは、Obj-C でのオブザーバー パターンの実装を説明するリンクです。(私が使っているものと非常に似ていますが、良い書き方です。)

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

私は通常、永続化レイヤーもインターフェースから分離するのが好きです。オブザーバーまたは KVO を使用して、何かが変更されたことをビジネス ロジックとビュー コントローラーに通知します。

必要に応じて、提供されている通知センターから情報を送信することもできます...

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

それが役立つことを願っています!

于 2012-07-18T19:16:39.357 に答える