核心数据中具有 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
也一样。
这是我的代码。我在 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
也一样。