0

我正在创建我的第一个 Objective-C 应用程序之一。我有一堆 UIViews 和其他视图,例如 MapView 等等。

在我的模型中,我有一个名为 register 的方法,所有视图都可以注册。它们都放在模型中的 NSMutableArray 中。每当模型更新数据时,我都会在“视图”数组上运行一个 for 循环,并且我希望所有视图(无论类型如何)都可以实现一个名为“更新”的方法,该方法可以从每个视图的模型中调用。

由于视图可能是 UIView 或任何其他类型,我不太确定 Objective-c 的做法是什么。

我真的很希望能够执行以下操作,但我知道这是不正确的。

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

}
4

2 回答 2

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 回答
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 回答