我正在对同步算法进行性能优化。
目前,iOS 应用从 Web API 接收大量 JSON。
在许多情况下,存在与关系相关的属性,例如:
PS。这是一个简化的例子。
[
{
"name":"Alice",
"age": 18,
"key": "a001"
},
{
"name":"Bob",
"age": 18,
"key": "b002",
"parent":"a001"
},
]
给定 CoreData 中的模型:
下载 JSON 后,我需要将其保存到 Core Data 中。但是,我需要建立这些对象之间的关系。
目前,我正在coredata上搜索对象并建立关系,您如何在下面的示例中看到(PS。这是一个简化的示例):
@IBAction func newItemTap(_ sender: Any) {
if let context = self.managedObjectContext {
let newPerson = Person(context: context)
newPerson.name = "Alice"
newPerson.age = 18
newPerson.key = "a001"
}
}
@IBAction func secondItemTap(_ sender: Any) {
if let context = self.managedObjectContext {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "erson")
fetchRequest.fetchLimit = 1
fetchRequest.predicate = NSPredicate(format: "key = %@", "a001")
do {
if let results = try context.fetch(fetchRequest) as? [NSManagedObject] {
if results.count > 0 {
let newPerson = Person(context: context)
newPerson.name = "Bob"
newPerson.age = 18
newPerson.key = "b002"
newPerson.parent = results.first as! Person?
}
}
} catch {
print("Error reading trips")
}
}
}
@IBAction func checkTap(_ sender: Any) {
if let context = self.managedObjectContext {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "erson")
do {
if let results = try context.fetch(fetchRequest) as? [Person] {
for obj: Person in results {
print(obj.name ?? "")
print(obj.parent?.name ?? "<no parent>")
}
}
} catch {
print("Error reading trips")
}
}
}
我正在寻找一种快速建立关系的方法,如 secondItemTap 方法所示。
有人遇到并解决过这种性能问题吗?有什么建议吗?
Best Answer-推荐答案 strong>
我对CoreData 不是很精通,所以我无法提供实际代码,但基本上可以归结为以下几点:
确保您的数据库在 key 属性上维护良好的索引。
根据您的数据库,在 CoreData 中可能有不同的定义方式,但从 this question 判断它似乎真的可以归结为只是在数据定义的 indexed 属性上打勾(这非常接近它应该的样子)。
关于ios - 从属性中建立核心数据关系的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/49948721/
|