[英]How to bind NSImageView by path?
我有一個帶有tableview /核心數據對象細節的程序。 屬性之一是圖像(僅顯示在詳細信息中)。 我認為最好只保存圖像文件的路徑,而不是圖像本身(在我看來,包含圖像的核心數據文件比圖像大得多,即使僅此而已...)。
由於假定用戶將圖像拖到圖像阱上,因此我認為使用“值路徑”(AC.selection.image)將圖像阱綁定到陣列控制器(AC)是合適的。 但是,這無能為力(圖像阱接受拖動到此處的圖像,但是當我們更改選擇時它會保留在此處)。
在我看來,我必須實現一些“值轉換器”,而不是可用的(NSUnarchiveFromData和NSKeyedUnarchiveFromData),因為我已經嘗試過了。
我猜對了嗎? 如果是這樣,那將是什么價值轉換器? 我需要定義嗎? 還是這完全不可能?
也許我應該補充一點,我仍在使用OSX 10.6,因此似乎排除了某些假設...
謝謝
是。 有可能的。
根據我的經驗,“值路徑”和“值URL”綁定僅是單向工作,例如, 您可以使用它們指定圖像視圖的內容 ,但是不能從拖動的圖像中提取路徑/ URL 。 該文檔說“綁定是只讀的”,這有點含糊不清,但是我相信這就是它的含義。
最后,我只使用了一個文本框,其中包含一個路徑,一個“ Choose…”按鈕,並且圖像視圖僅作為預覽。 但是,如果您真的想要“ Image Well”功能,我建議您使用類似KSImageView (GitHub gist)之類的方法,該方法將從 NSPasteboard
獲取路徑並進行存儲/重新廣播。 這是該功能的主要方法(從NSImageView
繼承后):
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender {
NSPasteboard *pboard = sender.draggingPasteboard;
NSString *plist = [pboard stringForType:NSFilenamesPboardType];
if (!plist) return;
NSArray<NSString*> *files =
[NSPropertyListSerialization propertyListWithData:[plist dataUsingEncoding:NSUTF8StringEncoding]
options:NSPropertyListImmutable
format:NULL
error:NULL];
if (files.count == 0) return;
NSDictionary *userInfo = @{@"imagePath": files[0]};
[[NSNotificationCenter defaultCenter] postNotificationName:@"KSImageDroppedNotification"
object:self
userInfo:userInfo];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.