Base de Données des erreurs lors de l'archivage avec de nouveaux Xcode 13

0

La question

J'ai ce protocole:

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

Je confirme que certains de mes NSManagedObject classes avec l'extension comme ceci:

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

Lorsque j'essaie d'archives avec de nouveaux Xcode 13, j'obtiens cette erreur:

Type 'AppEntity' n'est pas conforme à un protocole de ManagedObjectProtocol'

Mais quand j'essaie juste d'exécuter ce code sur mon appareil il s'appuie amende.

C'était un bâtiment/d'archivage fine avec Xcode 12 et les anciennes versions, mais avec de nouveaux Xcode 13 (et Xcode 13.1) j'ai un problème. Où pourrait être le problème? Comment puis-je résoudre ce problème?

Une chose de plus que je reçois comme erreur lors de l'archivage et pas lors de la génération de débogage. J'ai ce code avant d'obtenir de l'entité:

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))
            }
        }
    }
}

Je reçois ces messages d'erreur:

Type 'Entity' est pas membre de 'fetchRequest'

Quel est le problème? Comment puis-je corriger ces erreurs de Données lors de l'archivage?

Merci pour l'aide

Edit:

Encore un exemple de méthode d'assistance dans lequel j'obtiens l'erreur avec 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

La meilleure réponse

1

J'ai même des erreurs de compilation. Je ne trouve pas d'erreur de compilation raison, mais je pense que c'est la solution de contournement:

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

Oui, c'est la solution que je peux archive de projet et de travail et pour l'instant je suis à l'aide. Mais je voudrais avoir de réelle solution parce que je ne suis pas pourquoi pourquoi j'ai cette erreur de compilation et je ne sais pas si cela pourrait signifier plus de problèmes à l'avenir.
Libor Zapletal

Je suis totalement d'accord avec vous
kumabook

Dans d'autres langues

Cette page est dans d'autres langues

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