更新NSManagedObject不会使用MagicalRecord调用NSFetchedResultsControllerDelegate

时间:2014-07-04 19:17:52

标签: core-data magicalrecord nsfetchedresultscontroller

我有一个具有这种一对多关系的模型:

Order -->> LineItem 

我在UITableViewCells中显示LineItems:

enter image description here

我使用UIPickerView来改变LineItems的数量。

GOAL => 通过更改选择器值,再次重新计算subTotal。

问题出在这里,通过更新lineItem,NSFetchedResultsController Delegate不调用(我可以再次重新配置单元格并显示更新的数据)。但是当我更新Order时,例如将其设置为已完成NSFetchedResultsController将调用委托方法。

为什么通过更新lineItem不会影响要调用的委托方法?

我使用magicalRecord,这是我得到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委托方法吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

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

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