Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1530642
  • 博文数量: 465
  • 博客积分: 8915
  • 博客等级: 中将
  • 技术积分: 6365
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-30 15:05
文章分类

全部博文(465)

文章存档

2017年(33)

2016年(2)

2015年(4)

2014年(29)

2013年(71)

2012年(148)

2011年(178)

分类: IT业界

2011-06-09 16:24:56

iPhone企业应用实例分析之四:技术要点分析(1)

1.异步网络通信
在WebDoc Mobile项目中,系统的异步网络通信功能在AsyncNet类中实现,系统使用AsyncNet类来封装对NSURLConnection的操作,在iOS开发中通常使用NSOperation来处理多任务的并发问题,因为NSURLConnection本身已经支持异步操作,所以没有必要再使用NSOperation来对每个请求进行包装,而是使用一个NSMutableArray来存取请求队列,并使用一个NSMutableDictionary来将请求对象和响应数据进行关联,NSURLConnection对象作为Key,请求对象作为值,增加关联的代码:
NSMutableDictionary *requests;
AsyncNetRequest *request = [[AsyncNetRequest alloc] init];
[requests setObject:request forKey:
  [NSValue valueWithNonretainedObject:con]];
[request release];

2.Core Data缓存数据
在进行iPhone软件开发时,使用Core Data进行数据缓存或者管理持久数据是一项必须掌握的基本技术。前面我们已经做过介绍,和前面使用Core Data管理“动物园”项目持久数据不同的是,程序在这里没有使用表之间的关联关系,而只是定义文档、文档附件、文档历史以及统计图4种对象对应的数据库模型,用来缓存服务器返回的数据,并不作为关系数据和持久数据使用,在每次程序启动时都会清空数据库,重新使用服务器返回的最新数据,Core Data只起到数据缓存的作用,当数据从服务器返回以后,在第二次使用时程序从缓存取数据而不是从服务器取数据,这样可以提高反应速度,文档对象对应的数据库模型包含的字段定义如下。
//  Document.h
#import

@interface Document: NSManagedObject{ 
}


3.RSA算法加解密
在WebDoc Mobile项目中,iPhone客户端和服务器端(使用Microsoft .NET技术)采用Web Service进行相互通信,通信双方需要将数据进行加密处理,以保证网络通信的安全性,未经认证的客户端Web Service调用将不能在服务器端执行,系统采用业界目前广泛采用的PKI(公钥基础设施)技术进行用户认证管理,使用RSA算法进行加解密,有关RSA算法加解密的具体内容在本书前面的章节已经做了介绍,实现的细节请参考本书附带的光盘中的DocMobile工程,这里就不再详述。
4.自定义控件制作
在WebDoc Mobile项目中,由于用户界面的需要,系统制作了一些自定义的界面控件,其中包括与桌面软件类似的ComboBox界面控件,如图5-12所示。
 

该控件用于用户登录和高级搜索时,提供下拉多项目选择,程序使用UITextField类、UIPickerView类和UIToolbar类三个主要类实现,具体的实现方法在前面的章节已经做了具体介绍。
自定义搜索控件,控件外观如图5-13所示。
 

该控件提供在许多数据记录中进行选择过滤的功能,当用户输入一个字符或者单词,程序实时从数据记录中找出开头字符或者记录中包含该字符或者单词的记录,把记录进行实时过滤。这样,用户就不用在很长的列表里面查找,而是从过滤后的少量记录里面挑选,该控件在需要用户从非常多的选项中做选择的时候,可以作为界面设计元素。控件使用SearchViewController类实现,SearchViewController类内部使用UITableView和UISearchBar联合实现记录过滤功能,当用户输入字符时,程序使用NSString类的rangeOfString方法对记录进行过滤,并使用过滤后的记录刷新UITableView的内容,代码如下。
- (void) searchTableView {
 
 NSString *searchText = search.text;
   
 for (NSString *sTemp in tempArray)
 {
  NSRange titleResultsRange = [sTemp rangeOfString:searchText options: NSCaseInsensitiveSearch];
  
  if (titleResultsRange.length > 0)
   [searchArray addObject:sTemp];
 }
 
}
本节控件实现和使用相关的完整源代码文件请参考本书附带的光盘中的DocMobile工程。

 

 

本文节选自《iOS软件开发揭密:iPhone&iPad企业应用和游戏开发》一书。
《iOS软件开发揭密:iPhone&iPad企业应用和游戏开发》一书已由电子工业出版社正式出版,本书由虞斌著。

购买地址:
互动出版网:

阅读(1672) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~