我的第一个iphonet小程序诞生!
来源:互联网 发布:apache加载php 编辑:程序博客网 时间:2024/05/16 17:46
经过一周的时间,终于完成了我的第一个iphone程序,暂时出名叫PocketWord,简称PW。它是一个简单的单词手册程序,目前功能是:可以开关单词解释,当关闭单词解释时,被选择单词会显示涵义。
上面是程序的界面, 非常的简单,但还是在使用sqlite3时费了我不少周折,现在总结一下完成这个程序中遇到的问题,做个纪念。
单词都是放在sqlite3数据库文件中的,在xcode中使用的#import <sqlite3.h>导入头文件,以C函数的形式调用使用。
问题1. 导入sqlite3动态连接库
在做PW程序之前,还专门用sqlite3做了一个控制台程序,就遇到编译问题,后来才知道xcode中使用sqlite3还需要导入libsqlite3.dylib动态连接库文件。查询一翻找到“/Developer/SDKs/MacOSX10.6.sdk/usr/lib/libsqlite3.dylib” 文件导入工程中,程序也顺利编译通过。待到做PW程序时,之前是在模拟器中调试运行都还一切正常。正在高兴之时,设置为真机运行时提示link错误.
从提示的信息上看,是sqlite3在连接上出的问题。还好在网络上cocoachina论坛上找到同样问题的帖子,才解决决问题。
问题原因是在iphone中使用的libsqlite3.dylib与在mac上的文件不一样。在iphone上需要导入:
“ /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/libsqlite3.dylib"目录下的动态连接文件。
后来发现在xcode中可以直接导入,非常方便,免得到目录中去找。具体方法是:
选择project->TARGETS->BuildPhases->LinkBinaryWith Libraries 点击加号,在弹出的窗口中选择sdk提供的动态库就是了。
还是看图简单一点:
问题2. 数据库文件的存放,与复制。
sqlite3动态连接问题前,在模拟器中运行的时候还遇到一个问题,就是在使用sqlite3_prepare_v2函数执行sql查询时总是返回1,意思是表不存在,但调试打开数据库是正常的。我又反复在终端上使用sqlite3命令行程序反复验证过sql是对的,表是也是有的。分析了一下: 1.sqlite在使用上不对; 2.要不就是数据库文件不对. 我在打开数据库之前使用代码检查一下db文件是否存,打印出文件大小:
//取得document路径数组 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDirectory, YES); //取得一个为当前程序的document目录 NSString *documentDirectory = [pathsobjectAtIndex:0]; //组装db文件名。 self.dbFileName = [documentDirectorystringByAppendingPathComponent:@"vocabulary.db"]; if (self.dbFileName == nil) //文件不存在退出 return; //创建文件管理器 NSFileManager *fileManager = [NSFileManagerdefaultManager]; //取得文件属性,返回一个字典对象 NSDictionary * attributes = [fileManagerattributesOfItemAtPath:self.dbFileName error:nil]; //从字典里查询NSFileSize,取文件大小 NSNumber *theFileSize = [attributesobjectForKey:NSFileSize]; NSLog(@"%dbfile: @, size: %d",self.dbFileName, theFileSize); if(theFileSize == 0) return;
调试程序发现,我的db文件大小为0,这是因为sqlite3_open函数在发现指定的文件不存在时,会自动生成。我的db文件不documneth目录下,必使用代码将使用到的资源文件拷贝到document下:
//使用NSBundle来取得工程中的db文件路径。 NSString *dbFile = [NSBundle mainBundle] pathForResource:@"vocabulary"ofType:@"db"]; [fileManager copyItemAtPath: dbFiletoPath: self.dbFileName error:nil];至此才将db文件复制到环境下,数据库问题终于解决了。
- 我的第一个iphonet小程序诞生!
- 我的第一个嵌入式程序诞生过程
- 我的第一个Web Log 诞生!!!
- 我的IBatisNet第一个小程序
- 我的第一个Python小程序
- 我的第一个JAVA小程序
- 我的第一个java小程序
- 我的第一个qt小程序
- 我的第一个Activiti小程序
- 我的第一个java小程序
- 我的第一个web小程序
- 我写的第一个小的程序
- 我的第一个显示动画的applet小程序
- 我的第一个Symbian小程序--Stack
- 我的第一个小程序-----身份信息查询功能
- 01--初识java及我的第一个小程序
- [python] 我的第一个python小程序
- 今天学习了我的第一个小程序 HelloWorld !!!
- 测试小例---Hibernate实现Oracle中数据的增删改查
- 连接池与反射
- 力拓自主研发制造SMT部分周边设备性能参数!
- 世界上最牛的程序员
- n节点组成二叉树的个数
- 我的第一个iphonet小程序诞生!
- use of at on linux
- 手把手教你把Vim改装成一个IDE编程环境(图文)
- oracle 10g安装
- c语言函数指针使用范例
- JAVA学习笔记(三十)
- 华为HR展现华为
- ZOJ HDU 3538 Arrange the Schedule
- 一周简报(维护项目空间)