Контекст создан в одном потоке, доступ к другому потоку не создает никаких проблем - PullRequest
0 голосов
/ 23 марта 2019

В документации Apple написано «Контексты управляемого объекта привязаны к потоку (очереди), с которым они связаны при инициализации.»

Означает, что контекст, созданный в одном потоке, должен использоваться в этом потоке, использование его в другом потоке вызовет проблему.

Есть ли случаи, когда возникнут проблемы? В приведенном ниже коде контекст, созданный в основном потоке, использовался другим потоком для сохранения изменений в постоянном хранилище.

func addTwoUsers() {

        //1) get reference to app delegate singleton instance
        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }

        //2) We need context from container Entity needs context to create objects
        let managedObjectContext = appDelegate.persistentContainer.viewContext
        let userFetchRequest = NSFetchRequest<User>(entityName: "User")

        do {
            //4) Execute fetch request
            let users: [User] = try managedObjectContext.fetch(userFetchRequest)
            print(users.count)

        }
        catch let error as NSError {
            print("Could not fetch. \(error), \(error.userInfo)")
        }

        DispatchQueue.global(qos: .background).async {
            //2) Created a User object

            let user = User(context: managedObjectContext)
            user.secondName = "User One Seond name"
            user.firstName = "ali"

            //2) Created a User object
            let secondUser = User(context: managedObjectContext)
            secondUser.secondName = "User Second Seond name"
            secondUser.firstName = "Not ali"

            //7) Save to persitsent store
            do {
                try managedObjectContext.save()
            } catch let error as NSError {
                print("Could not save. \(error), \(error.userInfo)")
            }

        }
    }
...