<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>非鱼观点-互联网观察 &#187; Core Data</title>
	<atom:link href="http://www.unfish.net/archives/tag/core-data/feed" rel="self" type="application/rss+xml" />
	<link>http://www.unfish.net</link>
	<description>if(I&#039;m awake){I&#039;m writing code;}else{I&#039;m ready to write code;}</description>
	<lastBuildDate>Mon, 12 Jul 2010 13:16:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>iPhone开发：在Core Data应用中使用原生Sql功能</title>
		<link>http://www.unfish.net/archives/649-20100103.html</link>
		<comments>http://www.unfish.net/archives/649-20100103.html#comments</comments>
		<pubDate>Sun, 03 Jan 2010 05:54:41 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[生活杂谈]]></category>
		<category><![CDATA[Core Data]]></category>
		<category><![CDATA[IPhone程序开发]]></category>

		<guid isPermaLink="false">http://www.unfish.net/?p=649</guid>
		<description><![CDATA[苹果在iPhone 3.0以后的sdk中提供了Core Data功能，对于普通的数据库应用开发来说，大大提高了方便性。
新建Window Base Application的时候，选上下面的使用Core Data，模板就自动创建好了，在delegate文件里提供了使用Core Data存取数据的所有方法，在其它View Controller里面只要调用delegate里面的方法就可以了。而修改Data Model并基于该Model创建Entity定义也提供了可视化的操作，一旦定义了实例，只要在程序中new一个实例，给变量赋值，然后调用delegate中的save方法就可以添加一条新的记录了。这种方法对于长文本和时间等sql中比较难处理的字段尤其好用。而且在已保存的记录中取列表等操作也非常方便。（具体可以参考apple提供的Core Data入门教程）。
但是后来当我需要做汇总功能的时候，就完全傻掉了，虽然Core Data也提供了简单的sum, avg等运算，但是对于ralationship下的sum却完全找不到文档，甚至论坛上也搜不到解决方案。难道要我取出list再一个个手动汇总？这样数据量多的时候效率低的不是一点。当然，这时候如果能直接使用sql语句来汇总，那就最简单不过了。可是，Core Data封装的很完整，都不知道它把数据存到哪里去了，怎么办？难道要用sqlite重写整个程序，那已有添加和明细等功能就要做相当大的无谓的改动了。
今天终于找到了解决方案：Core Data本身就是基于sqlite的封装，所以它的底层仍然是使用sqlite进行存储数据的，而它使用的数据库，就在delegate文件中。通常是程序的Documents目录下的以程序名为名字的sqlite文件。如果程序已经在模拟器中运行过，只要进入用户目录下的Library/Application Support/iPhone Simulator/User/Applications/，这里是你所有模拟器中运行过的程序，找到你需要的那个，进去以后进入Documents目录，里面就是自动生成的sqlite数据库文件。把它复制出来，用sqlite3命令直接查看数据库结构就可以了。
默认情况下生成的数据表的名字就是你的Entity的名字，加上字母Z开头，字段名也就是你定义的实例名字，同样加上字母Z开头，而主键就是个自增长的int型。有了这个数据库结构，在程序中添加libsqlite3.0.dylib的framework，然后就可以在程序中使用原生sqlite3功能了。
有了方便的core data解决简单的数据操作，再配合完全自定义的sqlite功能，现在可以随心所欲的开发强大的数据库应用了？！
]]></description>
			<content:encoded><![CDATA[<p>苹果在iPhone 3.0以后的sdk中提供了Core Data功能，对于普通的数据库应用开发来说，大大提高了方便性。</p>
<p>新建Window Base Application的时候，选上下面的使用Core Data，模板就自动创建好了，在delegate文件里提供了使用Core Data存取数据的所有方法，在其它View Controller里面只要调用delegate里面的方法就可以了。而修改Data Model并基于该Model创建Entity定义也提供了可视化的操作，一旦定义了实例，只要在程序中new一个实例，给变量赋值，然后调用delegate中的save方法就可以添加一条新的记录了。这种方法对于长文本和时间等sql中比较难处理的字段尤其好用。而且在已保存的记录中取列表等操作也非常方便。（具体可以参考apple提供的Core Data入门教程）。</p>
<p>但是后来当我需要做汇总功能的时候，就完全傻掉了，虽然Core Data也提供了简单的sum, avg等运算，但是对于ralationship下的sum却完全找不到文档，甚至论坛上也搜不到解决方案。难道要我取出list再一个个手动汇总？这样数据量多的时候效率低的不是一点。当然，这时候如果能直接使用sql语句来汇总，那就最简单不过了。可是，Core Data封装的很完整，都不知道它把数据存到哪里去了，怎么办？难道要用sqlite重写整个程序，那已有添加和明细等功能就要做相当大的无谓的改动了。</p>
<p>今天终于找到了解决方案：Core Data本身就是基于sqlite的封装，所以它的底层仍然是使用sqlite进行存储数据的，而它使用的数据库，就在delegate文件中。通常是程序的Documents目录下的以程序名为名字的sqlite文件。如果程序已经在模拟器中运行过，只要进入用户目录下的Library/Application Support/iPhone Simulator/User/Applications/，这里是你所有模拟器中运行过的程序，找到你需要的那个，进去以后进入Documents目录，里面就是自动生成的sqlite数据库文件。把它复制出来，用sqlite3命令直接查看数据库结构就可以了。</p>
<p>默认情况下生成的数据表的名字就是你的Entity的名字，加上字母Z开头，字段名也就是你定义的实例名字，同样加上字母Z开头，而主键就是个自增长的int型。有了这个数据库结构，在程序中添加libsqlite3.0.dylib的framework，然后就可以在程序中使用原生sqlite3功能了。</p>
<p>有了方便的core data解决简单的数据操作，再配合完全自定义的sqlite功能，现在可以随心所欲的开发强大的数据库应用了？！</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.unfish.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/649-20100103.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
