gpt4 book ai didi

objective-c - 最佳实践 - iOS 中的 NSManagedObjectContextObjectsDidChangeNotification

转载 作者:太空狗 更新时间:2023-10-30 03:26:41 25 4
gpt4 key购买 nike

我正在使用 Core Data 编写我的第一个综合应用程序,我想看看跟踪各种对象更改/更新/删除的最佳方法是什么。例如,我有一个 Notes 实体和一个 Location 实体,它们之间是一对一的关系,我的想法是每个笔记都可以标记其位置。然后我有一个带有驱动笔记列表的 fetchedResultsController 的 UITableView(您可以在其中添加新笔记并为其附加日期和位置),但是我还有 2 个其他 View Controller ,一个带有 map View ,一个带有日历 View . map View 获取 Location 中的所有位置并将它们显示在 map 上。日历 View 基本上再次从 Notes 中获取所有数据,并仅在日历 View 中显示。我应该如何在我的日历和 map View 中跟踪注释和位置的变化?在 viewDidLoad 中加载它们一次很容易,但我应该如何跟踪所有更改,以便当用户重新访问 map View 时(例如)他/她也能看到最新数据。

我破译的一种方法是在 map View 和日历 View 中监听 NSManagedObjectContextObjectsDidChangeNotification 中的通知。每次保存时,这似乎都会从托管上下文中返回所有插入、删除和更新的对象。然后我可以浏览这些对象并查看是否需要更新我的 View 。这就是我正在考虑的做法:

在 MapViewController viewDidLoad 中:

[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(objectChangedNotificationReceived:)
name: NSManagedObjectContextObjectsDidChangeNotification
object: context];

然后:

- (void) objectChangedNotificationReceived: (NSNotification *) notification
{
NSArray* insertedObjects = [[notification userInfo]
objectForKey:NSInsertedObjectsKey] ;
NSArray* deletedObjects = [[notification userInfo]
objectForKey:NSDeletedObjectsKey] ;
NSArray* updatedObjects = [[notification userInfo]
objectForKey:NSUpdatedObjectsKey] ;
NSLog(@"insertObjects: %@", [insertedObjects description]);
NSLog(@"deletedObjects: %@", [deletedObjects description]);
NSLog(@"updatedObjects: %@", [updatedObjects description]);

for (NSManagedObject *obj in insertedObjects) {
if ([obj class] == [Location class]) {
NSLog(@"adding a new location");
Location *locationObj = (Location *) obj;
[self.mapview addAnnotation: locationObj];
}
}
}

这看起来对吗?似乎有很多冗余代码要放入每个 View Controller 中,尤其是当我对多个 NSManagedObject 感兴趣时。我还缺少其他一些技术吗?

最佳答案

NSFetchedResultsController似乎符合您的要求。它将有效地管理来自核心数据的数据处理。您为日历 View Controller 和 map View Controller 重复使用相同的获取请求。

关于objective-c - 最佳实践 - iOS 中的 NSManagedObjectContextObjectsDidChangeNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6757561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com