कोर डेटा त्रुटियों जब संग्रह के साथ नई Xcode 13

0

सवाल

मैं इस प्रोटोकॉल:

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))
        }
    }
}
core-data objective-c protocols swift
2021-10-26 08:08:33
1

सबसे अच्छा जवाब

1

मैं एक ही संकलन त्रुटियों. मैं नहीं मिल सकता है, संकलन त्रुटि के कारण है, लेकिन मुझे लगता है कि यह एक समाधान:

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

हाँ, यह समाधान है कि मैं संग्रह कर सकते हैं परियोजना के साथ और यह काम कर रहा है और अब मैं उपयोग कर रहा हूँ यह. लेकिन मैं होगा की तरह है करने के लिए वास्तविक समाधान नहीं है क्योंकि मैं क्यों मुझे लगता है कि त्रुटि को संकलित और मैं नहीं जानता कि यदि यह मतलब हो सकता है और अधिक समस्याओं में भविष्य.
Libor Zapletal

मैं पूरी तरह से आप के साथ सहमत
kumabook

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में