简单的答案是您不应该将模型数据(文件 URL 数组)存储在视图中。
您的视图应该将文件列表传递给其他控制器对象,然后控制器将文件列表存储在某种模型对象中。这就是 MVC 的意义所在。
一种方法是使用委托模式,您的视图将声明一个类似这样的协议方法:
@protocol YourViewProtocol
- (void)imageView:(YourImageViewClass*)aView receivedDroppedURLs:(NSArray*)arrayOfURLs;
@end
您的视图也会有一个较弱的datasource 属性:
@interface YourImageViewClass : NSImageView
@property (weak) id <YourViewProtocol> datasource;
@end
然后您将控制器对象设置为视图的数据源。控制器必须符合协议并实现其方法:
@interface YourController <YourViewProtocol>
- (void)imageView:(YourImageViewClass*)aView receivedDroppedURLs:(NSArray*)arrayOfURLs;
@end
然后,在接收 drop 的 view 方法中,你会做这样的事情:
- (void)receivedDroppedURLs:(NSArray*)urls
{
if([datasource conformsToProtocol:@protocol(YourViewProtocol)])
{
[datasource imageView:self receivedDroppedURLs:urls];
}
}
另一种方法是通过自定义绑定。在自定义视图中实现绑定有点复杂,如果您不是经验丰富的 Cocoa 开发人员,我建议您最初使用委托/数据源模式。