0

初めての Objective-C アプリの 1 つを作成しています。UIView と MapView などのその他のビューがたくさんあります。

私のモデルには、すべてのビューを登録する register というメソッドがあります。それらはすべて、モデルの NSMutableArray に配置されます。モデルがデータを更新するたびに、「ビュー」の配列に対して for ループを実行します。タイプに関係なく、各ビューのモデルから呼び出すことができる「update」と呼ばれるメソッドを実装するすべてのビューが必要です。

ビューがUIViewまたはその他のタイプである可能性があるため、これを行うObjective-cの方法が何であるかはよくわかりません。

次のようなことができるようになりたいのですが、これは正しくありません。

for(NSInteger i=0; i<[_views count]; i++)
{
    NSObject *view = [_views objectAtIndex:i];
    [view update:data];

}
4

2 に答える 2

2

プロトコルを定義します。

@protocol IUpdateable <NSObject>
@required
-(void)update:(id)data;
@end

次に、ビュークラスでプロトコルを実装します...

@interface SomeView : UIView <IUpdateable>
@end;

@implementation SomeView
-(void)update:(id)data
{
    //Do something with data
}
@end;

_views次に、配列にビューのコレクションが含まれていると仮定して、メソッドを一気に呼び出すことができIUpdateableます...

[_views makeObjectsPerformSelector:@selector(update:) withObject:someData];

参照: NSArrayプロトコルの操作

于 2013-02-18T00:58:29.883 に答える
2

あなたは Cocoa デリゲートと同じことをしようとしています。updateメソッドで正式なプロトコルを定義し、すべてのUIViewクラス (またはモデルに登録可能にしたい他のクラス) がそのプロトコルを採用するようにします。

プロトコルを定義します。

@protocol Updateable <NSObject>
@required
- (void) update: (id)data;
@end

プロトコルを採用します。

@interface MyView : UIView <Updateable>
- (void) update: (id)data;
...
@end;
于 2013-02-18T00:51:07.627 に答える