通过KVO观察对数据库值的更改

时间:2013-04-29 16:20:30

标签: ios sqlite key-value-observing

我正在构建一个消息传递应用程序。每当发生插入/删除/读取消息等任何操作时,我都会通过sqlite触发器更新数据库中的徽章计数。

目前,尽管数据库中的值更新是异步发生的,但我无法得到关于应用程序中值何时发生变化的通知,因此我会定期轮询。

是否有某种方法可以在数据库值上设置观察者/在给定值更改时发布一些通知?

我知道我可以通过首先更新内存中属性中的徽章计数然后将更改保存到数据库中来轻松完成此操作;但是我不太愿意这样做,因为这个值有太多的入口点要改变,我不想在任何地方添加SET属性。

2 个答案:

答案 0 :(得分:3)

一种可能的选择是定义仅在更新数据库中的特定值时调用的触发器。然后,触发器应调用您在应用中创建的用户定义函数。您可以使用sqlite3_create_function函数将自己的函数添加到SQLite。你的触发器会像:

CREATE TRIGGER some_trigger_name
AFTER UPDATE OF some_column ON some_table
FOR EACH ROW BEGIN
    SELECT my_custom_fuction();
END;

如果需要,您可以将1个或多个参数传递给您的函数。

答案 1 :(得分:1)

虽然这可能不是您的选择,但Core Data做得很好。