首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[核心数据]:数据:<fault>

[核心数据]:数据:<fault>
EN

Stack Overflow用户
提问于 2021-08-22 19:03:02
回答 1查看 42关注 0票数 1

函数中的questions参数已满,但我不能将赋值传递给questionsCD.questions?.questionList

id title 变量是 not nil**.这些变量正在健康地工作。**

在控制台输出中,questions返回nil

我无法在questionList QuestionsNSSecureCoding 类中分配变量,因此我认为它返回零。为什么?

您可以检查核心数据实体映像,以更详细地查看questionsCD.questions?.questionList

核心数据保存功能:

代码语言:javascript
复制
func saveSelectedQuestion(questionTitle: String, id: String, questions: [QuestionList]) {
    
    let questionsCD = QuestionCD(context: persistentContainer.viewContext)
    questionsCD.title = questionTitle
    questionsCD.id = id
    questionsCD.questions?.questionList = questions
    print("nil test: \(questionsCD.questions?.questionList ?? [])")
    
    do {
        try persistentContainer.viewContext.save()
    } catch let error {
        print("Failed to save selected category: \(error.localizedDescription)")
    }
}

核心数据获取函数:

代码语言:javascript
复制
func getSelectedQuestion(questionID: String) -> [QuestionCD] {
    let fetchRequest: NSFetchRequest<QuestionCD> = QuestionCD.fetchRequest()
    let search = NSPredicate(format: "id == %@", questionID)
    print("search: \(search)")
    fetchRequest.predicate = search
    fetchRequest.returnsObjectsAsFaults = false
    print("request predicate: \(String(describing: fetchRequest.predicate))")
    do {
        return try persistentContainer.viewContext.fetch(fetchRequest)
    } catch let error {
        print("get hata: \(error.localizedDescription)")
        return []
    }
}

控制台输出:

代码语言:javascript
复制
selectedQuestionCD [<QuestionCD: 0x2800e8e60> (entity: QuestionCD; id: 0x9d00d28ec7359eb0 <x-coredata://089E80AC-0E4F-4303-BF8F-47C31EC70ED4/QuestionCD/p2>; data: {
    id = "agustos_test_1";
    questions = nil;
    title = "A\U011fustos Test 1";
})]

核心数据实体:

问题NSSecure编码:

代码语言:javascript
复制
public class QuestionsNSSecureCoding: NSObject, NSSecureCoding {
    
    public static var supportsSecureCoding: Bool = true
    
    var questionList: [QuestionList]

    
    required init(questions: [QuestionList]) {
        self.questionList = questions

    }
    
    public func encode(with coder: NSCoder) {
        coder.encode(questionList, forKey: "questionList")

    }
    
    required public init?(coder: NSCoder) {
        
        questionList = coder.decodeObject(of: NSArray.self, forKey: "questionList") as? Array<QuestionList> ?? []

    }
}

问题值转换器:

代码语言:javascript
复制
@objc(QuestionsValueTransformer)
final class QuestionsValueTransformer: NSSecureUnarchiveFromDataTransformer {
    static let name = NSValueTransformerName(rawValue: String(describing: QuestionsValueTransformer.self))
 
    override static var allowedTopLevelClasses: [AnyClass] {
        return [QuestionsNSSecureCoding.self]
    }
    
    public static func register() {
            let transformer = QuestionsValueTransformer()
            ValueTransformer.setValueTransformer(transformer, forName: name)
        }
}

我的自定义模型:

代码语言:javascript
复制
class QuestionContainer: Codable {
    
    var questionCategories: [Question]
    
    init(questionCategories: [Question]) {
        self.questionCategories = questionCategories
    }
}

class Question: Codable, Identifiable {
    
    var title: String
    var id: String
    var questions: [QuestionList]
    
        init(title: String, id: String, questions: [QuestionList]) {
            self.title = title
            self.id = id
            self.questions = questions
        }
}

class QuestionList: Codable, Identifiable {
    
    var id: String
    
    init(id: String) {
        self.id = id
    } 
}
EN

回答 1

Stack Overflow用户

发布于 2021-08-22 19:48:28

我认为问题是questionCD.questions是零,所以这条线

代码语言:javascript
复制
questionsCD.questions?.questionList = questions

什么都不做。您需要使用正确的问题数组创建一个QuestionsNSSecureCoding实例,并将其分配给questions属性:

代码语言:javascript
复制
questionsCD.questions = QuestionsNSSecureCoding(questions: questions)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68884352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档