tutorial persistencia existing español datos data con ios core-data nsfetchrequest swift3 xcode8-beta2

ios - persistencia - ¿Cómo hago una solicitud de recuperación utilizando la nueva función fetchRequest de NSManagedObject?



persistencia de datos en swift 4 (2)

Ok, he descubierto dos maneras de hacer esto. El primer enfoque , que es similar a mi código de ejemplo es simplemente:

var moc: NSManagedObjectContext! let request = MyEntity.fetchRequest() var results : [MyEntity] do { results = try moc.fetch(request) } catch { // error stuff}

El segundo enfoque , que se mostró en la WWDC 2016, utiliza una función llamada "ejecutar" en nuestro objeto de solicitud de búsqueda.

Si ve los detalles en NSFetchRequest, verá un comentario que indica claramente que la operación debe realizarse en un bloque.

// Executes the fetch request using the current managed object context. This method must be called from within a block submitted to a managed object context. @available(iOS 10.0, *) public func execute() throws -> [ResultType]

Me di cuenta de que esta era la forma de llevar a cabo la búsqueda:

var moc: NSManagedObjectContext! let request = MyEntity.fetchRequest() var results : [MyEntity] moc.perform { self.results = try! request.execute() }

Para los que ruedan los suyos.

Si está lanzando su propio código, es posible que su código no se compile. En el código generado automáticamente se incluye un nuevo método llamado fetchRequest que el compilador utiliza para pasar el tipo. Así es como se ve el código.

@nonobjc public class func fetchRequest() -> NSFetchRequest<MyEntity> { return NSFetchRequest<MyEntity>(entityName: "MyEntity"); }

En iOS 10, el equipo de CoreData agregó un nuevo método "fetchRequest" a NSManagedObject. Se parece a esto:

public class func fetchRequest() -> NSFetchRequest<NSFetchRequestResult>

Lo cual, por lo que entiendo, nos permite reemplazar esto:

let request = NSFetchRequest<MyEntity>(entityName: "MyEntity")

con este:

let request = MyEntity.fetchRequest()

Sin embargo, cuando intento hacer una solicitud simple como esta:

let request = MyEntity.fetchRequest() do { results = try request.execute() } catch let error { print("failed to fetch coffee object: /(error)") }

Recibo el siguiente error:

Error de dominio = NSCocoaErrorDomain Code = 134060 "(null)" UserInfo = {message = No se puede obtener sin un NSManagedObjectContext en el alcance}

Por lo tanto, claramente el error está indicando que necesito poner un NSManagedObjectContext en el alcance. He estado buscando ejemplos, pero parece que puedo encontrar un ejemplo completo de cómo realizar una solicitud con las nuevas funciones de la API.

Pregunta

Al utilizar las funciones más recientes de la API Core Data, ¿cómo hago una solicitud de recuperación simple? La pregunta subyacente es cómo puedo llevar mi NSmanagedObjectCotnext al alcance.

Debo tener en cuenta que puedo realizar una solicitud correctamente utilizando la sintaxis tradicional.


Para i OS 10 ( Swift 3 ) La siguiente forma me ayudó:

var userRecordsArray: [UserProfile] = [] func getData() { let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "UserProfile") let managedContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext do { userRecordsArray = try managedContext.fetch(fetchRequest) as! [UserProfile] } catch { print("Fetching Failed") } }