2015-12-12 8 views
5

Piszę aplikację OS X, i musi istnieć możliwość usunięcia wszystkich instancji "SongEntity" przechowywanych w jego magazynie danych podstawowych. Jednak gdy próbuję wykonać NSBatchDeleteRequest, moje awarie aplikacji, z następującym konsoli-wyjścia (fragment):Aplikacja ulega awarii podczas wykonywania NSBatchDeleteRequest z "Nieznanym typem polecenia <NSBatchDeleteRequest, ..>"

Nieznany typ polecenia (jednostki: SongEntity; kwantyfikatorów: ((null)); sortDescriptors: ((null)); Typ: NSManagedObjectIDResultType;)>

Oto moja realizacja:

func clearStore() 
{ 
    let fetchRequest = NSFetchRequest(entityName: "SongEntity") 
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest) 

    do 
    { 
     try managedObjectContext.executeRequest(deleteRequest) 
    } 
    catch 
    { 
     fatalError("Not able to perform operation: \(error)") 
    } 
    managedObjectContext.reset() 
} 

Każda pomoc będzie mile widziane

EDIT: Okazuje się, że ten problem jest związany z wybranym sklepie typu: Od klasy NSBatchDeleteRequest:

// May not be supported by all store types. 

Próbowałem zmieniając sklepu typu z NSXMLStoreType (domyślny szablon MacOS) do NSSQLiteStoreType i teraz działa.

+0

"w pewnych okolicznościach"? - Uwaga: NSBatchDeleteRequest wymaga iOS 9. –

+0

Usunąłem to sformułowanie (podziękowania). A zatem NSBatchDeleteRequest nie jest dostępny na OS X ...? Od [Uwagi do wydania El Capitan] (https://developer.apple.com/library/mac/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_11.html) Rozumiem, że NSBatchDeleteRequest _jest_ obsługiwane na El Capitan – Albertsen

+0

Przepraszam, miałem przeoczyłem tag [osx]. Nie wiem, czy jest dostępny na OS X (i od kiedy). –

Odpowiedz

3

NSBatchDeleteRequest jest wykonywane na koordynatorze magazynu trwałego, a nie na kontekście obiektu zarządzanego.

try persistentStoreCoordinator.executeFetchRequest(
    batchDeleteRequest, withContext:context 
) 
+0

dla OS X to po prostu 'executeRequest' bez pobierania. Mam jednak opisany problem, mimo że wykonuję żądanie na persistentStoreCoordinator. Jakieś pomysły? :/ – Daniel

+0

Masz na myśli Swift 3. To jest starsza odpowiedź. – Mundi

+0

Ah Przepraszam. Pomyślałem, że to różnica między systemem iOS/Mac, a nie Swift 2/Swift 3. – Daniel

Powiązane problemy