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