1

将@protocol 添加到 Model 类并在 Controller 中实现它是一种很好的模式吗?

这是我用来在我的模型数据更改时发送消息以重新加载 UITableView 的代码,它是对象 c 编码的好方法吗?:

我的模型.h

@protocol myModelDelegate
{
(void) refreshTableView:(id) sender;
}
@end

@interface MyModel
{
@property (nonatomic,strong) (NSArray *) myData;
@property (nonatomic,weak) (id) <myModelDelegate> delegate;
}
@end

我的模型.m

@implementation MyModel

@synthesize myData=_myData;

    - (NSArray*) myData {
    if(!_myData) {
    _myData= [[NSArray alloc] init];
    }

    return _myData;
    }

 - (void) setMyData: (NSArray*) myData
    {
         if (_myData != myData) {
        _myData=myData;
    [delegate refreshTableView:self];
                           }
    }

@end

我的数据控制器.h

...
@interface MyDataController: UITableViewController <myModelDelegate>
...

我的数据控制器.m

@interface MyDataController()
        @property (nonatomic,strong) (MyModel *) model;
@end

@implementation MyDataController

@synthesize model=_model;

-(MyModel *) model
{
if(!_model)
  {
    _model=[[MyModel alloc]init];
     model.delegate=self;
  }
return _model;
}
    ...
        - (void) refreshTableView: (id) sender
        {
          [TableView reloadData];
        }
    ...
@end
4

1 回答 1

4

我认为这种设计没有任何问题。

我唯一要更改的是将委托方法的签名更改为:

-(void)modelDidChange:(MyModel*)model;

这更符合您看到的关于委托方法命名的最佳实践,也暗示了该方法的更广泛语义:模型将“发出信号”它已更改的事实;委托将对此采取行动(即,如果是表,则刷新表;如果是持久性组件,则存储模型内容等)

于 2012-08-01T07:38:52.253 回答