核心数据中具有 nil 属性的额外实体

extra entities with nil attributes in Core Data

这是我的代码。我在 Core Data 中有额外的具有 nil 属性的实体。当我首先删除 运行 应用程序时,我得到一个保存的对象,其中从核心数据中获取了 nil 属性。

class RepositoryEntity {

private var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

func fetchRepositories() -> [RepositoryEntity] {
    do {
        return try context.fetch(RepositoryEntity.fetchRequest())
    } catch(let error) {
        print("errr: ", error.localizedDescription)
    }
    return []
}

func saveObject(repo: Repository, onSuccess: () -> Void, onFailure: (_ error: String) -> Void) {
        let repoEntity = RepositoryEntity(context: self.context)
        repoEntity.fullName = repo.fullName
        repoEntity.dateCreated = repo.dateCreated
        repoEntity.url = repo.url
        repoEntity.language = repo.language
        repoEntity.repoDescription = repo.repoDescription
        repoEntity.id = repo.id

        let ownerEntity = OwnerEntity(context: self.context)
        ownerEntity.ownerName = repo.owner.ownerName
        ownerEntity.avatarUrl = repo.owner.avatarUrl

        repoEntity.addToOwner(ownerEntity)
        
//        Save the data
        do {
            try context.save()
            onSuccess()
        } catch(let error) {
            onFailure("Something Happend. Try again later.")
            print(error.localizedDescription)
    }
}

func deleteRepository(repo: Repository, onSuccess: () -> Void, onFailure: (_ error: String) -> Void) {
   
    let repositories = fetchRepositories()
    guard let deletableRepo = repositories.first(where: {[=10=].id == repo.id}) else { return }

    self.context.delete(deletableRepo)
    
    do {
        try context.save()
        onSuccess()
    } catch(let error) {
        onFailure("Something Happens. try again later.")
        print(error.localizedDescription)
    }
    
}

}

当我首先删除和 运行 应用程序时,我得到一个保存的对象,其中从核心数据中提取了 nil 属性。

当你写“我得到一个保存的对象...”时:什么对象? RepositoryEntity?你怎么知道你有一个保存的对象,通过调用 fetchRepositories()?我只能假设它是那样的(而不是空 OwnerEntity)。

在那种情况下,问题是要调用 func fetchRepositories() 您需要创建一个实例。所以,当你从零个对象开始时,只要你调用 fetchRepositories() 你就已经至少有一个了。

变化:

func fetchRepositories() -> [RepositoryEntity]

与:

static func fetchRepositories() -> [RepositoryEntity]

并从类型中调用它:

RepositoryEntity.fetchRepositories()

deleteRepository也一样。