iphone - 核心数据 - 监视更改并注册本地通知

标签 iphone cocoa-touch core-data key-value-observing

我对 Core Data 和 KVC 比较陌生,但我想要一些关于注册 Core Data 对象更改监听器的指导。情况如下:

我有一个名为 PatientNSManagedObject 和另一个名为 Meduction 的 NSManagedObject。一个Patient可能有很多Meminations,并且一个Memination有一个startOnendOn日期。

我想以某种方式监听所有 Meduction 对象的 endOn 属性的更改。当发生更改时,我想在 iOS 设备上安排本地通知。我以前使用过本地通知,但不知道在这种情况下将其代码放在哪里。

我是否在应用程序委托(delegate)中创建调度代码并以某种方式注册应用程序委托(delegate)以监听 Meduction 对象中的更改?这是否需要附加到NSManagedObjectContext

这是如何完成的?指针将不胜感激!

谢谢!

最佳答案

使用键值观察,您需要一些实例来进行观察。有时,这可能是在药物上调用 -setEndOn: 的同一个对象;有时可能必须是其他东西。假设您的应用程序有一个 MeminationManager 类 - 创建了一个实例。并且,进一步假设 MedicateManager 有一个实例方法 -createMedicateWithName:startOn:endOn: ,如下所示:

- (Medication*) createMedicationWithName:(NSString*)medName startOn:(NSDate*)startDate endOn:(NSDate*)endDate
    {
    //  Create and configure a new instance of the Compound entity 
    Medication *newMedication = (Medication *)[NSEntityDescription insertNewObjectForEntityForName:@"Medication"
                                                inManagedObjectContext:[self managedObjectContext]];
    [newMedication setName:medName];
    [newMedication setStartOn:startDate];
    [newMedication setEndOn:endDate];

    //  Set up KVO
    [newMedication addObserver:self
                    forKeyPath:@"endOn"
                    options:NSKeyValueObservingOptionNew
                    context:nil];

    return newCompound;
    }


- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
                                                    change:(NSDictionary *)change 
                                                    context:(void *)context
    {
    if ([keyPath isEqualToString:@"endOn"])
        {
        //  ... schedule local notification on the iOS device for (Medication*)object.
        return;
        }
    }

或者类似的东西。

请注意,当您删除药物时,您需要删除观察者...此外,在启动应用程序时,您需要将药物管理器建立为现有药物的观察者。我认为这可能就像迭代所有药物并为每个药物调用 addObserver 一样简单。如果您有很多药物,那么您可能希望以更“懒惰”的方式执行此操作(即,在 -awakeFromFetch 中)。

关于iphone - 核心数据 - 监视更改并注册本地通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4833655/

相关文章:

ios - Removed Entity 再次被 MagicalRecord 中的 findFirstByAttribute 找到

iphone - 在应用程序或 Paypal 与 iPhone 应用程序集成

ios - UITableViewDataSource 无法附加到类,swift-ios 中编译错误

java - 是否可以使用 .Net Framework/Java 创建 SQLite DB 并使用 Web 服务将 DB 推送到 iPhone?

ios - 为现有实体创建新的 CoreData 属性时 Swift 崩溃

ios - 如何处理coredata中的关系

ios - UIImageView 的 cornerRadius 不工作

iphone - 将Webservice数据缓存到核心数据中

ios - 从目录获取文件到NSData

iphone - 在 iPhone sdk 的导航栏中隐藏后退栏按钮