Не знаю, правильно ли я описываю проблему, но вот мое замешательство: прямо сейчас у меня есть json вроде этого`
[
{
"title": "TextBook",
"items" : [
{
"name" : "firstBook",
"instore" : true
}
]
},
{
"title": "Charger",
"items" : [
{
"name" : "firstCharger",
"instore" : true
}
]
},
{
"title": "Studyroom",
"items": [
{
"name" : "firstStudyroom",
"instore" : true
}
]
},
{
"title": "Headphone",
"items":[
{
"name" : "firstHeadphone",
"instore" : true
}
]
}
]
`.
, и я прочитал его в моем AppDelegate.swift файл через JSON Decoder
func parseJSON(jsonData: Data) {
let context = persistentContainer.newBackgroundContext()
let contextForItem = persistentContainer.newBackgroundContext()
do {
let decoder = JSONDecoder()
decoder.userInfo[CodingUserInfoKey.context!] = context
let decodedData = try decoder.decode([Category].self, from: jsonData)
for category in decodedData {
let newCategory = Category(context: context)
newCategory.title = category.title
if let itemArray = category.items {
for item in itemArray {
let newItem = Item(context: contextForItem)
newItem.name = item.name
newItem.instore = item.instore
newItem.parentCategory = category
itemData.append(newItem)
try contextForItem.save()
print(newItem.parentCategory.title)
}
} else {
print("nothing in the set")
}
categoryModel.append(newCategory)
}
print(categoryModel.count)
print(itemData.count)
try context.save()
} catch {
print("error while decoding the JSON file, \(error)")
}
}
, но когда я загружаю свои категории и элементы в свой viewController с помощью запроса выборки, я всегда нахожу количество категорий, и элементы удваиваются и становятся 8. Я хочу чтобы знать, связано ли это с контекстом? Как я могу загрузить правильное количество товаров? Вот функция загрузки, которую я использовал в viewController:
func loadCategories() {
let fetchRequest = Category.fetchRequest() as! NSFetchRequest<Category>
do {
print("before fetching \(categories.count)")
categories = try context.fetch(fetchRequest)
print("afterLoading \(categories.count)")
} catch {
print ("Error while loading Categories \(error)")
}
self.collectionView.reloadData()
}