Я пытаюсь получить доступ к текстовому представлению результатов NSMetadataQuery
с помощью Swift. Однако атрибут kMDItemTextContent
, который содержит текстовое представление файла, не существует в результатах. Я могу подтвердить, что атрибут должен существовать, потому что поиск файлов с использованием этого атрибута работает безупречно.
Вот мой код:
import Foundation
import Cocoa
class Indexer {
public let spotlight = NSMetadataQuery()
let backgroundQueue = OperationQueue()
init() {
let nc = NotificationCenter.default
spotlight.searchScopes = []
spotlight.predicate = NSPredicate(fromMetadataQueryString: "kMDItemKind == *")
nc.addObserver(forName: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: nil, queue: self.backgroundQueue, using:{_ in
self.spotlight.disableUpdates()
for i in 0..<self.spotlight.resultCount {
let result = self.spotlight.result(at: i) as! NSMetadataItem
print("----- \(result.value(forAttribute: "kMDItemDisplayName") ?? "No title") -----")
for attribute in result.attributes {
print("\(attribute):", result.value(forAttribute: attribute) ?? "No content")
}
}
self.spotlight.enableUpdates()
})
spotlight.start()
}
}
Текущий результат для одного файла выглядит так:
----- n26-csv-transactions.csv -----
kMDItemContentTypeTree: (
"public.comma-separated-values-text",
"public.data",
"public.delimited-values-text",
"public.plain-text",
"public.item",
"public.content",
"public.text"
)
kMDItemContentType: public.comma-separated-values-text
kMDItemPhysicalSize: 16384
kMDItemDisplayName: n26-csv-transactions.csv
kMDItemKind: CSV Document
kMDItemContentCreationDate: 2019-04-25 17:09:08 +0000
kMDItemContentCreationDate_Ranking: 2019-04-25 00:00:00 +0000
kMDItemContentModificationDate: 2019-04-25 17:09:08 +0000
kMDItemInterestingDate_Ranking: 2019-05-08 00:00:00 +0000
kMDItemUsedDates: (
"2019-05-07 22:00:00 +0000"
)
kMDItemLastUsedDate: 2019-05-08 10:00:33 +0000
kMDItemLastUsedDate_Ranking: 2019-05-08 00:00:00 +0000
kMDItemUseCount: 3
kMDItemLogicalSize: 591
kMDItemWhereFroms: (
"https://app.n26.com/download-csv",
"https://app.n26.com/downloads"
)
kMDItemFSName: n26-csv-transactions.csv
kMDItemFSSize: 591
kMDItemFSCreationDate: 2019-04-25 17:09:08 +0000
kMDItemFSContentChangeDate: 2019-04-25 17:09:08 +0000
kMDItemFSOwnerUserID: 99
kMDItemFSOwnerGroupID: 99
kMDItemFSNodeCount: No content
kMDItemFSInvisible: 0
kMDItemFSTypeCode: 0
kMDItemFSCreatorCode: 0
kMDItemFSFinderFlags: 0
kMDItemFSHasCustomIcon: No content
kMDItemFSIsExtensionHidden: 0
kMDItemFSIsStationery: No content
kMDItemFSLabel: 0
Атрибут kMDItemTextContent
здесь отсутствует.
Есть ли способ получить доступ к этому атрибуту, используя NSMetadataItem
s, возвращаемый Spotlight? Если нет, есть ли другой способ получить доступ к текстовому представлению файла?