2015-02-01 4 views
5

Ich versuche NSMetadataQuery und NSPredate zu verwenden, um nach Dateien zu suchen. Nach einigen Stunden des Suchens und der Suche nach Lösungen (ich bin neu zu schnell) habe ich ein kleines Beispiel. Es kompiliert gut, aber die Ergebnisse sind Null. Ich habe verschiedene Vergleichselemente ausprobiert, aber am Ende ist metadataQuery.resultCount immer 0. Hat jemand eine Idee, was schief läuft?Suche nach Dateien mit NSMetadataQuery tut einfach nichts

class AppDelegate: NSObject, NSApplicationDelegate { 
var metadataQuery: NSMetadataQuery! 
var metadataQueryDidUpdateObserver: AnyObject? 
var metadataQueryDidFinishGatheringObserver: AnyObject? 


@IBOutlet weak var window: NSWindow! 

func applicationDidFinishLaunching(aNotification: NSNotification) { 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "initalGatherComplete:", name: NSMetadataQueryDidFinishGatheringNotification, object: nil) 

    metadataQuery = NSMetadataQuery() 
    metadataQuery.searchScopes = [NSMetadataQueryIndexedLocalComputerScope] 
    metadataQuery.predicate = NSPredicate(format: "%K LIKE '*'", NSMetadataItemFSNameKey) 
    metadataQuery.startQuery() 

} 

func initalGatherComplete(notification: NSNotification) { 
    metadataQuery.stopQuery() 

    let resultCounter = metadataQuery.resultCount 
    NSLog("%lu", resultCounter) 

    NSNotificationCenter.defaultCenter().removeObserver(self, name: NSMetadataQueryDidFinishGatheringNotification, object: nil) 
} 

Und last but not least: das aktuelle Prädikat alle Dateien auflisten sollte, aber am Ende das Prädikat sollte nur Liste Anwendungen. Was ist die beste Vorgehensweise, um ein solches Prädikat zu erstellen? Ich plante, für die Erweiterung .app zu filtern, aber vielleicht gibt es einen besseren Weg?

Danke!

+0

scheint wie NSMetadataQuery nicht ordnungsgemäß mit Swift funktioniert. Ich kann kein funktionierendes Beispiel finden – Silve2611

Antwort

4

Überprüfen Sie Ihre predicate syntax. Der LIKE Betreiber ist nicht für NSMetadataQuery Prädikat sucht (in der Tat NSPredicate verwenden eine ganz ähnliche, aber tatsächlich unterschiedliche Menge von Operatoren und das Verhalten im Zusammenhang mit der Spotlight-Metadatensuche.)

NSMetadataQuery ‚s-Syntax für glob Suche verwendet nur eine Gleichheitszeichen:

NSPredicate(format: "%K ==[cd] '*'", NSMetadataItemFSNameKey)