簡單的答案是,您不應該將模型數據(文件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
然後,在接收下降的觀點方法,你會做這樣的事情:
- (void)receivedDroppedURLs:(NSArray*)urls
{
if([datasource conformsToProtocol:@protocol(YourViewProtocol)])
{
[datasource imageView:self receivedDroppedURLs:urls];
}
}
另一種方式來做到這一點是通過自定義綁定。在自定義視圖中實現綁定有點複雜,如果您不是經驗豐富的Cocoa開發人員,我建議您最初使用委託/數據源模式。
感謝羅布..我想在這裏複製你的想法,但我顯然失去了一些東西。你知道任何教程可以幫助我嗎?謝謝! – Apollo 2012-03-15 21:54:10
問題是你的例子看起來很像遞歸..我們有一個帶有一個方法的協議,它的參數來自需要符合協議的類。是對的嗎? – Apollo 2012-03-15 22:15:10
看看你可能熟悉的'NSTableView'。上述方法的設計是基於'NSTableView'實現其'NSTableViewDataSource'協議的方式。您絕不會將數據存儲在表視圖中,它始終通過使用數據源或使用Cocoa綁定和「NSArrayController」進行訪問。 – 2012-03-15 22:23:03