Gibt es eine Möglichkeit, Datei-Tags ohne Shell-Befehle zu lesen/schreiben? Bereits versucht NSFileManager
und CGImageSource
Klassen. Bisher kein Glück.Lesen und Schreiben von Datei-Tags in der Kakao-App OS X mit swift oder obj-c
2
A
Antwort
2
NSURL
Ein Objekt hat eine Ressource für Schlüssel NSURLTagNamesKey
. Der Wert ist ein Array von Strings.
Dieses schnelle Beispiel liest die Tags, fügt das Tag Foo
hinzu und schreibt die Tags zurück.
let url = NSURL(fileURLWithPath: "/Path/to/file.ext")
var resource : AnyObject?
do {
try url.getResourceValue(&resource, forKey: NSURLTagNamesKey)
var tags : [String]
if resource == nil {
tags = [String]()
} else {
tags = resource as! [String]
}
print(tags)
tags += ["Foo"]
try url.setResourceValue(tags, forKey: NSURLTagNamesKey)
} catch let error as NSError {
print(error)
}
Die Swift 3+ Version ist ein bisschen anders. In URL
ist die tagNames
Eigenschaft get-nur so werfen zu überbrücken, ist es notwendig, die URL
zu Foundation NSURL
var url = URL(fileURLWithPath: "/Path/to/file.ext")
do {
let resourceValues = try url.resourceValues(forKeys: [.tagNamesKey])
var tags : [String]
if let tagNames = resourceValues.tagNames {
tags = tagNames
} else {
tags = [String]()
}
tags += ["Foo"]
try (url as NSURL).setResourceValue(tags, forKey: .tagNamesKey)
} catch {
print(error)
}
1
@ Vadian Antwort in Swift 4,0
('NSURLTagNamesKey' has been renamed to 'URLResourceKey.tagNamesKey'
)
let url = NSURL(fileURLWithPath: "/Path/to/file.ext"")
var resource : AnyObject?
do {
try url.getResourceValue(&resource, forKey: URLResourceKey.tagNamesKey)
var tags : [String]
if resource == nil {
tags = [String]()
} else {
tags = resource as! [String]
}
print(tags)
tags += ["Foo"]
try url.setResourceValue(tags, forKey: URLResourceKey.tagNamesKey)
} catch let error as NSError {
print(error)
}
Great! Du hast viel geholfen. Vielen Dank. – arsena
Hallo nochmal. Gibt es eine Methode, um ein vorhandenes Tag zu entfernen? wie removeResourceValue oder etwas? – arsena
Verwenden Sie 'setResourceValue' mit einem leeren Array oder wenn Sie möchten, dass andere den Wert aus dem Array entfernen und zurückschreiben. – vadian