У меня есть контроллер тележки. Пользователь может добавить элемент в свой список пожеланий. Если у нас нет списка желаний, мы должны создать по умолчанию. Это работает 2-3 раза, если я добавляю, а затем удаляю, а затем добавляю снова. И тогда я получаю ошибку:Почему различные разные контексты в одном представлении?
Illegal attempt to establish a relationship 'wishList' between objects in different contexts
class CartViewController: UIViewController, NSFetchedResultsControllerDelegate {
var fetchResultController:NSFetchedResultsController!
var shopItems:[ShopItem] = []
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
override func viewDidLoad() {
self.fetchResultController = NSFetchedResultsController(fetchRequest: fetchRequest,
managedObjectContext: self.appDelegate.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
self.fetchResultController.delegate = self
do {
try fetchResultController.performFetch()
self.shopItems = fetchResultController.fetchedObjects as! [ShopItem]
} catch {
fatalError("Failure to save context: \(error)")
}
}
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
let addToWishListAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Add to wish list", handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
var wishListResults:[WishList] = []
let fetchRequest = NSFetchRequest(entityName: "WishList")
var wishList:WishList
fetchRequest.fetchLimit = 1
//...some other code
wishList = NSEntityDescription.insertNewObjectForEntityForName("WishList", inManagedObjectContext: self.appDelegate.managedObjectContext) as! WishList
wishList.setValue("Default wish list", forKey: "title")
wishList.setValue("My wish list", forKey: "desc")
let shopItem = self.fetchResultController.objectAtIndexPath(indexPath) as! ShopItem
shopItem.setValue(true, forKey: "inWishList")
shopItem.setValue(wishList, forKey: "WishList")
do {
try self.appDelegate.managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
})
}
}
Почему контекст изменился?
> Кроме того, убедитесь, что вы создаете ManagedObjectContext использовать MainQueueConcurrencyType как: вы имеете в виду заменить это:. '' 'пусть AppDelegate = UIApplication.sharedApplication() вычеркивать ворота как! AppDelegate''' ?? Потому что я использую это в каждом контроллере? это нормально ? – Arti
теперь я получаю ошибку '' 'Незаконная попытка установить связь''' каждый раз. Это не помогает – Arti
Этот ответ фактически не затрагивает проблему потока, и реальная проблема заключается в том, что вы смешиваете объекты в двух контекстах – Wain