您的位置:首页 > 移动开发 > IOS开发

ios企业级应用开发心得

2014-01-14 14:10 204 查看
ios企业级应用开发的一些心得

 先说说通用的ios开发的一些注意事项吧,

1,关于应用的首次使用,要考虑到数据初始化的问题,可以在程序启动或者用户登录后加载程序需要的主数据,如果数据很多的话,可以考虑利用时间戳来限定数据(后面会详细提到)。

一般程序第一次使用时界面与使用一段时间后的应用有很大的差别,这时要注意应用的界面初始化,拿qq得好友列表界面为例(如果你是新用户,你应该有只有一个默认好友分组,其它数据都为空,这个分组从哪里来,当然后台和客户端都可以去完成这个操作,这些你应该去考虑)

2,关于controller封装的一些小技巧:

     1)还是首次使用的问题,当数据不全或者数据为空的情况下你当如何显示,这个可以完成一个方法的小封装,需要的时候后调用下

    2)你的view绝大部分都会根据用户的操作去展示不同的数据,这时候你可以写一个类似于tableview reloaddata 的方法,这个你只管修改你的数据,需要更新视图的时候,调一下它吧

     3)关于网络请求,相信大家用asi和af的比较多吧,我用的asi(通过delegate,喜欢用block的可以掠过),关于它的tag值,你可以写一个枚举类型,方便以后维护和代码易读,还有就是数据更新后记得立刻更新视图,否则可能会出现视图与数据显示不同步,引起数据错误甚至崩溃。 用gcd处理各个请求之间依赖的关系,减少数据传输的时间。

     4)继续说枚举语法,其实真的很简单实用,比如实现一个tableView的分组分区style和plain的切换,先说下需求,正常状态下显示为第一张图,在搜索框内输入文字时变为第二张图的状态

这时你就可以利用枚举来进行状态控制,和2)结合起来,几行代码就可以实现两种效果之前的转换。先用枚举定义tableView的2种状态,正常状态和searching状态,在2)中加入判断,根据不同的状态加载不同的数据源,更新视图,这样的好处是,我们无需了解tableview现在时什么状态,调用它就行

5)关于自定义视图,也可以利用枚举进行状态控制,给tableView的每个section加上headView(继承于uiview),左滑显示出3个按钮,此时点击headView无法展开分组,正常状态可以展开分组列表,如果利用状态控制很容易实现这种效果。

另外,通过面向对象思想对这个headview的进行分析,有视图左移,视图右移(开始编辑,结束编辑等动作)封装成对应的方法,共开出接口,方便外部调用

6)controller的重用,利用少部分代码,可以实现一个controller现实不同的视图,这个相信大家都用过,就不多说了

二,利用时间戳来实现大数据的同步

数据量较大的应用,一般都会在本地建一个小型的数据库,将服务端的一部分数据放在本地进行,以提升用户体验,但是问题来了,以患者表为例,若数据量很大的话,上万条记录,你不能每次都把所有的数据都网络获取一遍(浪费流量,你会等待很长时间),此时你可以通过时间戳来解决数据的同步问题。

假设医生有a和b两个客户端,a客户端要和b客户端进行数据同步

解决方案如下:

      在患者表中加入时间戳字段(服务器维护时间戳字段,本地不做修改,只是进行保存,服务端每条记录变动时,都会更新该记录的时间戳),每次请求网络数据时,发送患者表中得最大时间戳,服务端接收到该时间戳之后,只是将大于该时间戳的记录返回给客户端(首次进入的时候时,发送一个最小的时间戳),这样就极大的降低了传输的数据量

分析以下几种情况:

1.a客户端在1点增加了一个患者,b在1点后更新数据(上一次更新早于1点)获取到患者表中最大得时间戳,该时间戳小于a增加的那条记录的时间戳,这样服务器将返回a加入的这条记录,将它插入b的本地数据库即可

2.a客户端在1点更新了一个患者的信息,b在1点后更新数据(上一次更新早于1点)获取到患者表中最大得时间戳,该时间戳小于a增加的那条记录的时间戳,这样服务器将返回a更新的这条记录,将原记录删除,插入新的记录即可

3.a客户端在1点了删除了一个患者(假删除,将记录状态改为删除状态),b在1点后更新数据(上一次更新早于1点)获取到患者表中最大得时间戳,该时间戳小于a增加的那条记录的时间戳,这样服务器将返回a更新的这条记录,将原记录删除,插入新的记录即可(查询患者时过滤调状态为删除的部分)

总上,在获取到记录后,根据记录的主键,先删除该条记录,然后后重新插入数据库即可,这样就实现了大量数据的同步

三.关于企业级应用的版本更新

不同于上传App Store的软件是苹果通过itunes自动提示更新的,企业级应用要通过自己网站进行版本的更新
http://www.apkbus.com/android-131512-1-1.html
有详细说明,就不多说了。

值得注意的是,如果你的应用内有数据库版本更新的时候若不做特殊处理,就会引起错误。原因是原有的数据库文件在版本更新时未被删除。

解决方案:

定义数据库版本号,不同于应用的版本号,两个版本号分开管理。

将数据库的版本号存入数据库文件,同时在程序代码内用宏定义下该程序对应的数据库版本,

在拷贝数据库文件到doument目录下的时候作出如下判断:

数据库文件是否存在Documents路径下? 不存在则复制,存在则核对版本(数据库中存储的版本号和程序代码内定义的宏),若相同则不做操作,若不同则 删除数据库文件 重新复制一下新更新的数据库文件
这样做也决绝了若数据库结构不变,只升级程序即可,本地数据可以不做改动,但是若数据库结构变了,只能从服务器重新获取数据了。

图片传不上去。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息