1

いくつかのプロパティを持つ親 UIViewController A があります。そして、Aから継承している子UIViewController B、C、Dがあります。

私の質問は: B で、親プロパティの値を変更します。C、D は、親の値が B から変更されたことをどのように知ることができますか?

基本的に私は子供たちの間でプロパティを共有したいと考えています。

前もって感謝します。

コード例;

@interface A : UIViewController{
NSString *string1; //This is just example
}
@property (nonatomic, strong) NSString *string2;
@end

子B

@interface B : A
@end

@implementation B
//here I change string1 and string2;
@end

子C

@interface C : A
@end

@implementation C
//here I want to get changed string1 and string2 by Child A;
@end

子D

@interface D : A
@end

@implementation D
//here I want to get changed string1 and string2 by Child A;
@end

現時点では、Singletonを使用してすべての値を保存していますが、うまく機能していますが、そのような状況ではもっと良い方法があると思いますか?

4

2 に答える 2

1

あなたができる最も簡単なことは、継承されたプロパティを持つことだと思いますが、静的変数に対して読み取り/書き込みを行うために、親ビューのゲッターとセッターをオーバーライドします。

@interface A : UIViewController
@property (nonatomic, strong) NSString *sharedString;
@end

@implementation A

static NSString* _sSharedString;

- (NSString*) sharedString {
   return _sSharedString;
}

- (void) setSharedString: (NSString*) aString {
   _sSharedString = aString;
}

@end

プロパティを同期することをお勧めします。

これは、コードを考えると、すべての子の値を変更します。それが必要なこと(値の共有のみ)であることは理解しましたが、値が変更されたときに通知も必要な場合は、値が変更されたときに子(インスタンス)に通知するメソッドを追加できます。

于 2013-03-05T17:20:28.303 に答える
0

プロパティが変更されたときに、親クラスにメッセージを送信させることができます。サブクラスはそのメッセージのメソッドを実装でき、その中で変更に適応するために必要なことは何でも実行できます。

このようなものがすでにCocoaに組み込まれていることを覚えているようですが...

ああ。ここにあります。Key-Value Observationを調べてください。プロパティが KVC に準拠している限り、Cocoa はプロパティが変更されると自動的にメッセージを送信します。子にメソッドを実装してそれらを処理し、変更イベントをサブスクライブするだけです。

したがって、子クラスでは、次のように言うでしょう

[self addObserver:self
       forKeyPath:@"thePropertyName"
          options:NSKeyValueObservingOptionNew
          context:nil];

そして、次のような方法があります

-(void) observeValueForKeyPath:(NSString*)keyPath
                      ofObject:(id)observee
                        change:(NSDictionary*)change
                       context:(void*)context
{
    // here's where the magic happens
}

keyPath変更されたプロパティの名前になりchange、定数名 (名前の 、引用符なし) を持つ特定のキーの下に新しい値が含まれますNSKeyValueChangeNewKey。(通常、新しいプロパティを検索することもできます。)

監視するプロパティが多数ある場合、各子が各プロパティの変更をサブスクライブするのは面倒になる可能性があります。それをどのように処理するかは、すべてがどのように正確に関連しているかによって異なりますが、ええ. そんなに親のことを気にかけなきゃいけないのは、それ自体が匂いのようなものです...

于 2013-03-05T16:23:00.323 に答える