2013-04-29 66 views
1

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

目前,尽管数据库中的值更新是异步发生的,但我无法获知有关应用程序中值何时发生更改的通知,因此我正在定期进行轮询。

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

我知道我可以通过首先更新内存中属性的徽章计数然后将更改持久保存到数据库中,但我并不是很倾向于这样做,因为要改变这个值的入口点太多了,我不想在任何地方添加一个SET属性。

回答

1

虽然这可能不是您的选择,但核心数据可以做到这一点。

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个或多个参数的函数。

+0

谢谢,但我如何通知我的应用程序有关此更改? sqlite3_create_function创建一个SQL函数吗?我想要一些调用我的Objective-C代码的东西。 – Karthik 2013-04-30 05:45:27

+0

使用'sqlite3_create_function'可以将SQL函数绑定到您自己代码中的C函数。在我的回答中,当调用'my_custom_function' SQL函数时,这将导致您自己的C函数被调用。从那里你可以做任何你需要的。 – rmaddy 2013-04-30 05:59:01