簡體   English   中英

如何通過路徑綁定NSImageView?

[英]How to bind NSImageView by path?

我有一個帶有tableview /核心數據對象細節的程序。 屬性之一是圖像(僅顯示在詳細信息中)。 我認為最好只保存圖像文件的路徑,而不是圖像本身(在我看來,包含圖像的核心數據文件比圖像大得多,即使僅此而已...)。

由於假定用戶將圖像拖到圖像阱上,因此我認為使用“值路徑”(AC.selection.image)將圖像阱綁定到陣列控制器(AC)是合適的。 但是,這無能為力(圖像阱接受拖動到此處的圖像,但是當我們更改選擇時它會保留在此處)。

在我看來,我必須實現一些“值轉換器”,而不是可用的(NSUnarchiveFromData和NSKeyedUnarchiveFromData),因為我已經嘗試過了。

我猜對了嗎? 如果是這樣,那將是什么價值轉換器? 我需要定義嗎? 還是這完全不可能?

也許我應該補充一點,我仍在使用OSX 10.6,因此似乎排除了某些假設...

謝謝

是。 有可能的。

  1. 選擇圖像視圖
  2. 將其綁定到您的對象控制器。 在該值路徑字段中,您必須將路徑值設置為字符串屬性

根據我的經驗,“值路徑”和“值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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM