Могу ли я использовать один и тот же контекст для сохранения двух объектов в общих данных? - PullRequest
1 голос
/ 16 июня 2020

Не знаю, правильно ли я описываю проблему, но вот мое замешательство: прямо сейчас у меня есть 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()


}
...