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