แกนกลางข้อมูลเกิดข้อผิดพลาดตอนที่จัดเก็บกับคนใหม่ 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'ไม่ conform ต้องโพรโทคอล'ManagedObjectProtocol'

แต่ตอนที่ฉันแค่พยายามที่จะสั่งให้รหัสของอุปกรณ์มันสร้างสบายดี

มันเป็นตึก/แฟ้มจัดเก็บได้กับ Xcode 12 และแก่รุ่นแต่ด้วยคนใหม่ Xcode 13(และ Xcode 13.1)ฉันมีปัญหาแล้ว ที่อาจเป็นปัญหาหรอ? จะให้ฉันแก้ไขมันได้หรือเปล่า?

อีกอย่างนึงที่ฉันไปในฐานข้อผิดพลาดตอนที่จัดเก็บและไม่ใช่ตอนที่การดีบั๊กสร้างขึ้น ฉันมีรหัส fore เอารายการ:

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

ฉันมีเดียวกัน compile เกิดข้อผิดพลาด. ฉันไม่สามารถหา compile เกิดข้อผิดพลาดวยเหตุผลแต่ผมคิดว่านี่เป็นหนึ่งของ workaround:

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

ใช่นี่คือทางที่ฉันสามารถจัดเก็บโครงการด้วยกันและมันทำงานและสำหรับตอนนี้ฉันกำลังใช้มัน แต่ฉันอยากจะมีจริงของทางออกเพราะฉันไม่อทำไมทำไมฉันต้องนั่ compile เกิดข้อผิดพลาดและฉันไม่รู้ว่ามันอาจหมายถึงมากกว่าปัญหาในอนาคต
Libor Zapletal

ฉันเห็นด้วยกับคุณ
kumabook

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่