मैं इस प्रोटोकॉल:
protocol ManagedObjectProtocol {
associatedtype Entity
static var identifierKey: String { get }
static func fetchRequest() -> NSFetchRequest<NSFetchRequestResult>
func toEntity() -> Entity?
}
मैं इस बात की पुष्टि करने के लिए कुछ के NSManagedObject वर्गों के विस्तार के साथ इस तरह:
extension AppEntity: ManagedObjectProtocol {
typealias Entity = App
static var identifierKey: String {
return "articleId"
}
func toEntity() -> Entity? {
return nil
}
}
जब मैं करने की कोशिश के साथ संग्रह नए Xcode 13 मैं इस त्रुटि मिलती है:
प्रकार 'AppEntity' के अनुरूप नहीं है प्रोटोकॉल 'ManagedObjectProtocol'
लेकिन जब मैं सिर्फ कोशिश करने के लिए इस कोड को चलाने अपने डिवाइस पर यह बनाता है, ठीक है ।
यह निर्माण किया गया था/संग्रह के साथ ठीक Xcode 12 और पुराने संस्करणों के साथ, लेकिन नए Xcode 13 (और Xcode 13.1) मैं समस्या है. जहां समस्या हो सकती है? कैसे कर सकते हैं मैं इसे ठीक?
एक और बात यह है कि मैं त्रुटि के रूप में जब संग्रह और नहीं जब डिबग का निर्माण. मैं इस कोड को सामने पाने इकाई:
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))
}
}
}
}
मैं प्राप्त निम्न त्रुटि संदेश:
प्रकार 'इकाई' कोई सदस्य 'fetchRequest'
क्या गलत है? कैसे कर सकते हैं मैं ठीक इन कोर डेटा त्रुटियों जब संग्रह?
मदद के लिए धन्यवाद
संपादित करें:
एक और उदाहरण के लिए एक सहायक विधि में जो मैं त्रुटि के साथ 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))
}
}
}