NSView/UIView有数据源正常吗?

It's normal for NSView/UIView to have a datasource?

例如,我有一个绘制函数图的自定义视图。 首先,我需要从用户那里获取函数参数。 在我需要计算 x/y 并在视图上绘制此点之后。 那么,我可以使用此视图的数据源在 -drawRect: 中绘制绘图吗?或者它违反了 MVC 模式?

我认为你是 NSView 的子class 并创建一个自定义 class 来绘制绘图?如果是这样,那么是的,这是正确的设计模式。例如 NSTableView 就是这样设计的。您倾向于在 drawRect: 方法中绘制不需要数据源的内容。然后在 drawRect: 方法之外调用数据源,例如在 reloadData 方法中。

编辑重载数据示例:

- (void)reloadData{
    if([datasource respondsToSelector:@selector(points:)]) {
        for(NSValue *value in [datasource points]) {
            NSPoint point = value.pointValue;
            // Setup layer here and add to view.layer
        }
    }
}

这个问题更适合 http://programmers.stackexchange.com

答案是肯定的,使用数据源。为您的视图创建协议,例如 UITableViewDataSource 用于 UITableView。您可能还需要一个代表,例如 UITableViewDelegate 代表 UITableView.