2017-02-05 4 views
2

Lassen Sie uns sagen, dass ich einige NSManagedObjects von Core Data holen wollen und aufzählen alle Ergebnisse:Wie Zugriff auf NSFetchRequest Ergebnisse in Swift 3?

let request = NSFetchRequest<NSFetchRequestResult>() 
let entityDesc = NSEntityDescription.entity(forEntityName: "Chapter", in: context) 
request.entity = entityDesc 
do 
{ 
    let result = try context.execute(request) 
} 
catch 
{ 
    print("\(error)") 
} 

Jetzt habe ich ein NSPersistentStoreResult Objekt als Ergebnis der Abfrage, aber ich weiß nicht, was mit ihm zu tun . Die Klasse Dokumentation ist leer:

enter image description here

Wie soll ich die verwalteten Objekte, die von der Abrufanforderung zurück abrufen soll?

Antwort

4

Sie verwenden die fetch Methode eines NSManagedObjectContext

Erstellen Sie zunächst die Anfrage holen die allgemein oder spezifisch sein können:

let fetchRequest : NSFetchRequest<YourObject> = YourObject.fetchRequest 

let fetchRequest : NSFetchRequest<NSFetchRequestResult> = YourObject.fetchRequest 

es dann holen:

let results = context.fetch(fetchRequest) 
0

Basierend auf meiner Lesung der Header für NSManagedObjectContext, die execute() Methode, die Sie von Swift anrufen, ist für Anfragen, die af fekt nur den zugrunde liegenden persistenten Speicher, ohne vom Kontext selbst verarbeitet zu werden. Dies ist für eine Abrufanforderung nicht sehr sinnvoll, da nur Inhalte aus einem permanenten Speicher in einen Kontext gebracht werden sollen.

Hier ist der relevante Ausschnitt aus der NSManagedContext Header-Datei von Core Data:

// Method to pass a request to the store without affecting the contents of the managed object context. 
// Will return an NSPersistentStoreResult which may contain additional information about the result of the action 
// (ie a batch update result may contain the object IDs of the objects that were modified during the update). 
// A request may succeed in some stores and fail in others. In this case, the error will contain information 
// about each individual store failure. 
// Will always reject NSSaveChangesRequests. 
- (nullable __kindof NSPersistentStoreResult *)executeRequest:(NSPersistentStoreRequest*)request error:(NSError **)error API_AVAILABLE(macosx(10.10),ios(8.0)); 
1

Schnell holen können:

Angenommen, Sie Foto Entity

let request:NSFetchRequest<Photo> = Photo.fetchRequest() 
/*  OR 
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Photo") 
*/ 
do { 
    photos = try coreDataStack.context.fetch(request) as [Photo] 
    collectionVIew.reloadData() 
    print(photos?.count ?? "No Photo found") 
} catch let error as NSError { 
    print("Error in fetch :\(error)") 
} 
haben