更新 NSManagedObject 不会使用 MagicalRecord 调用 NSFetchedResultsControllerDelegate
Posted
技术标签:
【中文标题】更新 NSManagedObject 不会使用 MagicalRecord 调用 NSFetchedResultsControllerDelegate【英文标题】:updating NSManagedObject doesn't call NSFetchedResultsControllerDelegate using MagicalRecord 【发布时间】:2014-07-04 19:17:51 【问题描述】:我有一个具有这种一对多关系的模型:
Order -->> LineItem
我在 UITableViewCells 中显示 LineItems:
我使用 UIPickerView 来改变 LineItems 的数量。
GOAL=>通过更改选择器值,重新计算 subTotal。
问题在于通过更新 lineItem,NSFetchedResultsController Delegate
不会调用(我可以再次重新配置单元格并显示更新的数据)。但是当我更新订单时,例如将其设置为已完成 NSFetchedResultsController
将调用委托方法。
为什么更新 lineItem 不会影响要调用的委托方法?
我使用magicRecord,这是我获得NSFetchedResultsController
的方法
- (NSFetchedResultsController *)fetchedResultsController
if (_fetchedResultsController != nil)
return _fetchedResultsController;
else
_fetchedResultsController = [Order fetchAllSortedBy:@"orderDate" ascending:YES withPredicate:nil groupBy:nil delegate:self];
return _fetchedResultsController;
我设置表格视图的方式:
ConfigureCellBlock configureCell = ^(OrderDetailsCell *cell, LineItem *lineItem)
[cell configureForLineItem:lineItem];
;
//set fetchedresults controller delegate
Order *order = [[self.fetchedResultsController fetchedObjects] lastObject];
NSArray *lineItems = [order.lineItems allObjects];
self.ordersDataSource = [[ArrayDataSource alloc] initWithItems:lineItems cellIdentifier:@"lineItemCell" configureCellBlock:configureCell];
self.tableView.dataSource = self.ordersDataSource;
配置单元:
- (void)configureForLineItem:(LineItem *)lineItem
self.menuItemName.text = lineItem.menuItemName;
self.price.text = [lineItem.unitPrice stringValue];
self.quantity.text = [lineItem.quantity stringValue];
self.totalPrice.text = [lineItem.totalPrice stringValue];
self.pickerController.model = lineItem;
self.picker.delegate = self.pickerController;
self.picker.dataSource = self.pickerController;
[self.picker setSelectedNumber:lineItem.quantity];
获取 obj1 然后更新 obj3 会导致调用 NSFRC 委托方法吗?
【问题讨论】:
【参考方案1】:FRC 只会观察到它直接感兴趣的对象的变化,而不是与它们相关的任何对象。
您应该配置自己的观察,直接使用 KVO 或保存的上下文,并使用它来触发 UI 刷新。
【讨论】:
是的,我没有获取订单,而是获取了 lineItems 并为它们设置了 FRC 委托。谢谢以上是关于更新 NSManagedObject 不会使用 MagicalRecord 调用 NSFetchedResultsControllerDelegate的主要内容,如果未能解决你的问题,请参考以下文章
xCode 8 会自动更新 NSManagedObject,是吗?