Datos principales errores a la hora de archivar con el nuevo Xcode 13

0

Pregunta

Tengo este protocolo:

protocol ManagedObjectProtocol {
    associatedtype Entity
    
    static var identifierKey: String { get }
    static func fetchRequest() -> NSFetchRequest<NSFetchRequestResult>
    
    func toEntity() -> Entity?
}

Confirmo a algunos de mis NSManagedObject clases con extensión como esta:

extension AppEntity: ManagedObjectProtocol {
    typealias Entity = App
    
    static var identifierKey: String {
        return "articleId"
    }
    
    func toEntity() -> Entity? {
        return nil
    }
}

Cuando trato de archivo con el nuevo Xcode 13 me sale este error:

Tipo de 'AppEntity' no se ajusta al protocolo de ManagedObjectProtocol'

Pero cuando trato de ejecutar este código en mi dispositivo con el que se construye bien.

Se fue construyendo/archivado bien con Xcode de 12 años y más versiones, pero con el nuevo Xcode 13 (y Xcode 13.1) tengo un problema. De dónde podría estar el problema? ¿Cómo puedo solucionarlo?

Una cosa más que me sale como error a la hora de archivar y no cuando la generación de depuración. Tengo este código palestra obtener de la entidad:

func get<Entity: NSManagedObject>
    (with predicate: NSPredicate? = nil,
     sortDescriptors: [NSSortDescriptor]? = nil,
     fetchLimit: Int? = nil,
     inContext context: NSManagedObjectContext? = nil,
     completion: @escaping (Result<[Entity], Error>) -> Void) {
    
    if let ctx = context {
        coreData.performTask({ (context) in
            do {
                let fetchRequest = Entity.fetchRequest()
                fetchRequest.predicate = predicate
                fetchRequest.sortDescriptors = sortDescriptors
                if let fetchLimit = fetchLimit {
                    fetchRequest.fetchLimit = fetchLimit
                }
                let results = try context.fetch(fetchRequest) as? [Entity]
                completion(.success(results ?? []))
            } catch {
                completion(.failure(error))
            }
        }, inContext: ctx)
    } else {
        coreData.performForegroundTask { context in
            do {
                let fetchRequest = Entity.fetchRequest()
                fetchRequest.predicate = predicate
                fetchRequest.sortDescriptors = sortDescriptors
                if let fetchLimit = fetchLimit {
                    fetchRequest.fetchLimit = fetchLimit
                }
                let results = try context.fetch(fetchRequest) as? [Entity]
                completion(.success(results ?? []))
            } catch {
                completion(.failure(error))
            }
        }
    }
}

Tengo estos mensajes de error:

Tipo de "Entidad" no tiene ningún miembro 'fetchRequest'

Qué tiene de malo? Cómo puedo solucionar estos Datos principales errores a la hora de archivar?

Gracias por la ayuda

Editar:

Un ejemplo más para el método auxiliar en la que tengo un error con no member fetchRequest:

func count(entity: NSManagedObject.Type,
           with predicate: NSPredicate? = nil,
           fetchLimit: Int? = nil,
           completion: @escaping (Result<Int, Error>) -> Void) {
    coreData.performForegroundTask { context in
        do {
            let fetchRequest = entity.fetchRequest()
            fetchRequest.predicate = predicate
            if let fetchLimit = fetchLimit {
                fetchRequest.fetchLimit = fetchLimit
            }
            let count = try context.count(for: fetchRequest)
            completion(.success(count))
        } catch {
            completion(.failure(error))
        }
    }
}
core-data objective-c protocols swift
2021-10-26 08:08:33
1

Mejor respuesta

1

Tengo el mismo error de compilación. No puedo encontrar un error de compilación razón, pero creo que este es uno de la solución:

if let entityName = Entity.entity().name {
    let request = NSFetchRequest<Entity>(entityName: entityName)
    ....
}
2021-10-27 11:11:31

Sí, esta es la solución que puedo archivo de proyecto y de trabajo y por ahora la estoy usando. Pero me gustaría tener una solución real, porque no sé por qué ¿por qué tengo que compilar error y no sé si podría significar más problemas en el futuro.
Libor Zapletal

Estoy totalmente de acuerdo con usted
kumabook

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................