【问题标题】:updating NSManagedObject doesn't call NSFetchedResultsControllerDelegate using MagicalRecord更新 NSManagedObject 不会使用 MagicalRecord 调用 NSFetchedResultsControllerDelegate
【发布时间】: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 委托方法吗?

【问题讨论】:

    标签: core-data magicalrecord nsfetchedresultscontroller


    【解决方案1】:

    FRC 只会观察到它直接感兴趣的对象的变化,而不是与它们相关的任何对象。

    您应该配置自己的观察,直接使用 KVO 或保存的上下文,并使用它来触发 UI 刷新。

    【讨论】:

    • 是的,我没有获取订单,而是获取了 lineItems 并为它们设置了 FRC 委托。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多