В документации 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)")
}
}
}