给定一个名为Book
的核心数据实体,总共可以计算多少Book
的最佳方法,并在UILabel中显示此总数? UILabel
需要在创建/删除书籍对象时更新(可能是应用程序中其他对象)。
实际上计算书籍并不困难。我的问题是,当这个数量发生变化时,我们如何得到更新?
Book
托管对象上的willSave / delete / etc? 答案 0 :(得分:3)
您可以收听与核心数据更改相关的通知(NSManagedObjectContextObjectsDidChangeNotification
),并从中更新您的用户界面。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleDataModelChange:) name:NSManagedObjectContextObjectsDidChangeNotification object:myManagedObjectContext];
- (void)handleDataModelChange:(NSNotification *)notification;
{
NSSet *updatedObjects = notification.userInfo[NSUpdatedObjectsKey];
NSSet *deletedObjects = notification.userInfo[NSDeletedObjectsKey];
NSSet *insertedObjects = notification.userInfo[NSInsertedObjectsKey];
// update your UI with the new count
}
注意:别忘了删除自己,
- (void)dealloc;
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
答案 1 :(得分:1)
您可以创建 NSFetchedResultsController 来获取 book 对象,然后实现它的委托方法。参考:
答案 2 :(得分:0)
如前所述,您可以订阅NSManagedObjectContextObjectsDidChangeNotification
并尝试分析它。我认为这有两个缺点。首先,在任何对象的任何更改中都会调用此通知。在发生更改时,呼叫不会真正发生,但此通知中仍会报告任何更改。其次,订户需要知道创建新书的所有上下文。您可能会考虑使用nil订阅此通知,以便上下文接收所有上下文的此通知。但这更加压倒性和危险,并不是苹果公司推荐的(你也会收到这个通知也适用于你不拥有的情况)。
我建议每个创建图书的地方都有自己的通知。与XYBookAddControllerDidAddBookNotification
,XYBookListControllerDidDeleteBookNotification
等相同。在这种情况下: