Date de bază erori atunci când arhivare cu noul Xcode 13

0

Problema

Am acest protocol:

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

Confirm, la unele dintre meu NSManagedObject clase cu extensia de genul asta:

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

Când m-am încerca să arhivă cu noul Xcode 13 primesc aceasta eroare:

Tip 'AppEntity' nu sunt conforme cu protocolul ManagedObjectProtocol'

Dar când am încerca pentru a rula acest cod pe dispozitivul meu se construiește bine.

Acesta a fost construirea/arhivare bine cu Xcode 12 și versiuni mai vechi, dar cu noul Xcode 13 (și Xcode 13.1) eu am o problemă. În cazul în care ar putea fi problema? Cum pot repara?

Un lucru pe care îl primesc eroare cand arhivare și nu atunci când depanare a construi. Am acest cod de prim-plan a obține entitatea:

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

Primesc aceste mesaje de eroare:

Tip "Entitate" are nici un membru 'fetchRequest'

Ce e în neregulă? Cum pot rezolva aceste Date de Bază erori atunci când arhivare?

Multumesc pentru ajutor

Edit:

Un exemplu mai mult pentru helper metodă în care I a lua eroare cu 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

Cel mai bun răspuns

1

Am primit același compila erori. Eu nu pot găsi eroare de compilare motiv, dar cred că aceasta este una dintre cele soluție:

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

Da, aceasta este soluția care pot arhiva proiect cu și funcționează și acum eu sunt, folosind. Dar aș dori să aibă o soluție reală pentru că nu știu de ce de ce am acea eroare de compilare și nu știu dacă asta ar putea însemna mai multe probleme în viitor.
Libor Zapletal

Sunt total de acord cu tine
kumabook

În alte limbi

Această pagină este în alte limbi

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