几个有用的iOS开源代码

来源:互联网 发布:易语言机器人源码 编辑:程序博客网 时间:2024/05/08 13:48

本文中将简单介绍几个笔者认为在开发中很有用的iOS开源类库及其简单使用方法


1:  SBJson

SBJson, 又名Json Framework, 是一个非常流行的,开源的JSON解析类库。SBJSon的使用非常简单,为在网络中传输与解析格式化的数据提供了极大的便利。

SBJson的使用也很简单,在项目中将类库文件添加到项目中,然后加入几个依赖的FrameWork,目前比价稳定的有ARC3.1版本的和非ARC版本的3.0,大家可以根据自身需要进行下载。

下面就SBJson的使用进行简单介绍:

[cpp] view plaincopy
  1. #import "SBJSon.h"  
  2.   
  3. //写json  
  4.         SBJsonWriter* jsonWriter = [[[SBJsonWriter alloc] init] autorelease];  
  5.         NSMutableArray* tempArray = [NSMutableArray array];  
  6.         NSDictionary* tempDicA = [NSMutableDictionary dictionary];  
  7.         [tempDicA addObject @"valueA" forKey @"keyA"];  
  8.         [tempArray addObject: tempDicA];  
  9.         NSDictionary* tempDicB = [NSMutableDictionary dictionary];  
  10.         [tempDicB addObject @"valueB" forKey @"keyB"];  
  11.         [tempArray addObject: tempDicB];  
  12.         NSMutableDictionary* jsonDic = [NSMutableDictionary dictionary];  
  13.         [jsonDic setObject: tempArray forKey: @"array"];  
  14.         NSString* jsonString = [jsonWriter stringWithObject: jsonDic];  
  15.   
  16. //解析json  
  17.          NSDictionary* resultDic = [jsonString JSONValue];  
  18.          NSArray* resultArray = [resultDic objectForKey @"array"];  
  19.          NSDictionary* dicA = [resultArray objectAtIndex: 0];  
  20.          NSDictionary* dicB = [resultArray objectAtIndex: 1];  
  21.          NSLog(@"%@, %@" [dicA objectForKey @"keyA", [dicB objectForKey: @"keyB"]);  

2: ASIHTTPRequest

ASIHTTPRequest是一个非常流行的iOS平台网络通信类库,使用ASIHTTPRequest之后,大大简化了iOS平台的网络编程。其以方便的接口对同步、异步的网络传输进行了传输,将ASIHTTPRequest添加到自己的项目也非常方便,将类库中所有文件拷贝到一个文件夹中,然后将此文件夹添加到项目中,同时要添加如下图CFNetWork之下所示的类库,就可以使用ASIHTTPRequest了:



使用ASIHTTPRequest步骤非常简答,在一般应用开发中,网络连接基本上使用的都是异步方式,下面简单演示一下最简单的异步通讯方法


[cpp] view plaincopy
  1. #import "ASIHTTPRequest.h"  
  2.   
  3. - (void) requestDataFromServer  
  4. {  
  5.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
  6.     NSURL* url = [NSURL URLWithString: @"www.fakeurl.com"];  
  7.     ASIHTTPRequest* request = [ASIHTTPRequest requestWithURL: url];  
  8.     [request setTag: 1024];  
  9.     [request setTimeOutSeconds: 3];  
  10.     [request setAllowCompressedResponse:YES];  
  11.     [request setDelegate:self];  
  12.     [request startAsynchronous];  
  13.     [pool drain];  
  14. }  
  15.   
  16. - (void)requestFinished:(ASIHTTPRequest *)request  
  17. {  
  18.     NSString* rawString = [request responseString];  
  19.     if (request.tag == 1024) {  
  20.         //处理网络返回结果  
  21.      }   
  22. }  
  23.   
  24. - (void)requestFailed:(ASIHTTPRequest *)request  
  25. {  
  26.     if (request.tag == 1024) {  
  27.         //处理网络错误  
  28.      }   
  29. }   

注意上面的两个函数中,后面连个为ASIHTTPRequest的delegate函数,其声明类型不能改变,只要在生成ASIHTTPRequest时的deleage设成了self,那么最后返回结果,不管是成功调用还是网络失败,都会调用这两个函数中的对应的一个。


3: FMDataBase

FMDataBase是iOS平台中一个非常强大的数据库类库,其将sqlite面向过程的接口以面向对象的方法展现出来,提供了极高的可用性。

其使用很简单,将sqlite 库添加到项目中,然后将FMDataBase类库文件添加到项目中,下面是对笔者对FMDataBase进行的一个二次封装,处理的数据库很简单,只有一张表,两个列,存储的都是一些key-value对,读者可以根据自身需要对此类进行修改。

[cpp] view plaincopy
  1. #import <Foundation/Foundation.h>  
  2. #import "FMDatabase.h"  
[cpp] view plaincopy
  1. @interface DBController : NSObject {  
  2. }  
  3.   
  4. @property (nonatomic, assign) FMDatabase *dataBase;  
  5.   
  6. +(BOOL)databaseExit;  
  7.   
  8. -(BOOL)initDatabase;  
  9.   
  10. -(void)closeDatabase;  
  11.   
  12. -(BOOL)deleteTable;  
  13.   
  14. -(BOOL)InsertTable:(NSString *)key_type value:(NSString *)key_value;  
  15.   
  16. -(BOOL)UpdataTable:(NSString *) valueStr key:(NSString *)keyStr;  
  17.   
  18. -(NSMutableDictionary *)querryTable;  
  19.   
  20. +(BOOL) deleteDataBase;  
  21.   
  22. @end  
  23.   
  24. @synthesize dataBase = _dataBase;  
  25.   
  26. - (id)init{  
  27.       
  28.     if(self = [super init]){  
  29.         _dataBase = [FMDatabase databaseWithPath: [DBController getPath]];  
  30.         if (![_dataBase open]) {  
  31.             NSLog(@"Create/Open dataBase %@ Failed!", [DBController getPath]);  
  32.         }   
  33.     }  
  34.     return self;  
  35. }  
  36.   
  37. //数据库是否存在  
  38. +(BOOL)databaseExit  
  39. {  
  40.     return [[NSFileManager defaultManager] fileExistsAtPath: [self getPath]];  
  41. }  
  42.   
  43.   
  44. //初始化数据库  
  45. -(BOOL)initDatabase{      
  46.     if ([DBController databaseExit]) {  
  47.         return [self createTable];  
  48.     }  
  49.     return NO;  
  50. }  
  51.   
  52.   
  53.   
  54. //创建数据库  
  55. -(BOOL)createTable  
  56. {  
  57.     return [self.dataBase executeUpdate: @"create table if not exists personTable(id integer primary key autoincrement, key text,value text);"];  
  58. }  
  59.   
  60. //删除数据表  
  61. -(BOOL)deleteTable{  
  62.     if ([DBController databaseExit]) {  
  63.         return [self.dataBase executeUpdate: [NSString stringWithFormat:@"drop table %@;",_PERSONINFO]];          
  64.     }  
  65.     return NO;  
  66. }  
  67.   
  68.   
  69.   
  70. //关闭数据库  
  71. - (void) closeDatabase  
  72. {  
  73.     [self.dataBase close];  
  74. }  
  75.   
  76. //插入数据  
  77. -(BOOL)InsertTable:(NSString *)key value:(NSString *)value  
  78. {  
  79.     if ([DBController databaseExit]) {  
  80.         BOOL result = NO;  
  81.         [self.dataBase beginTransaction];  
  82.         result = [self.dataBase executeUpdate:@"INSERT INTO personTable (key,value) VALUES (?,?)", key, value];  
  83.         [self.dataBase commit];  
  84.         return result;  
  85.     }  
  86.     return NO;  
  87. }  
  88.   
  89. //更新数据  
  90. -(BOOL)UpdataTable:(NSString *) valueStr key:(NSString *)keyStr  
  91. {  
  92.     if ([DBController databaseExit]) {  
  93.         BOOL result = NO;  
  94.         [self.dataBase beginTransaction];  
  95.         result = [self.dataBase executeUpdate:@"UPDATE personTable SET value=? WHERE key=?", valueStr, keyStr];  
  96.         [self.dataBase commit];  
  97.         return result;  
  98.     }  
  99.     return NO;  
  100. }  
  101.   
  102. //查询整个表  
  103. -(NSMutableDictionary *)querryTable  
  104. {  
  105.     NSMutableDictionary* resultDic = [[NSMutableDictionary alloc] init];  
  106.       
  107.     FMResultSet *rs = [self.dataBase executeQuery:@"select * from personTable"];  
  108.     while ([rs next]) {  
  109.         [resultDic setObject: [rs stringForColumn: @"value"] forKey: [rs stringForColumn: @"key"]];  
  110.     }  
  111.     return [resultDic autorelease];  
  112. }  
  113.   
  114. +(BOOL) deleteDataBase  
  115. {  
  116.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  117.       
  118.     NSString *documentsDirectory = [paths objectAtIndex:0];  
  119.       
  120.     NSString *path = [documentsDirectory stringByAppendingPathComponent:_DBNAME];//设置数据库得路径  
  121.       
  122.     NSFileManager *fileManager = [NSFileManager defaultManager];  
  123.       
  124.     BOOL find = [fileManager fileExistsAtPath:path];  
  125.       
  126.     if (find) {  
  127.           
  128.         [fileManager removeItemAtPath: path error: nil];  
  129.           
  130.     }  
  131.     return find;  
  132. }  
  133.   
  134.   
  135. - (void)dealloc {  
  136.     [_dataBase close];  
  137.     _dataBase = nil;  
  138.     [super dealloc];  
  139. }  
  140.   
  141. + (NSString*) getPath {  
  142.     // 打开的数据库  
  143.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  144.       
  145.     NSString *documentsDirectory = [paths objectAtIndex:0];  
  146.       
  147.     return [documentsDirectory stringByAppendingPathComponent:_DBNAME];//设置数据库得路径  
  148. }  
  149.   
  150.   
  151. @end  
[cpp] view plaincopy
  1.   

4: MPProgressHUD

MPProgressHUD是一个非常好用的进度指示器类库,其提供了苹果官方sdk没有提供的progress indicator接口,且提供多种样式,使用方法简便。

首先将类库文件添加到项目中。

使用实例代码如下:

[cpp] view plaincopy
  1. #import <UIKit/UIKit.h>  
  2. #import "MBProgressHUD.h"  
[cpp] view plaincopy
  1. #import <libkern/OSAtomic.h>  
  2. @interface SampleViewController : UITableViewController <MBProgressHUDDelegate>  
  3. @property (nonatomic, retain) NSCondition* condition;  
  4. @property (nonatomic, retain) MBProgressHUD* hud;  
  5. @end  
  6.   
  7. static volatile NSInteger WAITING_RESPONSE_FOR_SERVERRESPONSE = 0;  
  8.   
  9. - (void) popOutMBProgressHUD;  
  10. - (void) selectorForMPProgressHUD;  
  11. - (void) notifyMPProgressHUDToDisappear;  
  12.   
  13. @implementation SampleViewController  
  14. @synthesize hud = _hud;  
  15. @synthesize condition = _condition;  
  16.   
  17. - (id) initWithCoder:(NSCoder *)aDecoder  
  18. {  
  19.     self = [super initWithCoder: aDecoder];  
  20.     if (self != nil) {  
  21.         _hud = nil;  
  22.         _condition = [[NSCondition alloc] init];  
  23.     }  
  24.     return self;  
  25. }  
  26.   
  27. - (void) dealloc  
  28. {  
  29.     [_hud release];  
  30.     [_condition release];  
  31. }  
  32.   
  33. - (void) popOutMBProgressHUD  
  34. {  
  35.     MBProgressHUD* tempHud = [[MBProgressHUD alloc] initWithView:self.navigationController.view];  
  36.     self.hud = tempHud;  
  37.     [self.navigationController.view addSubview: tempHud];  
  38.       
  39.     self.hud.dimBackground = YES;  
  40.     self.hud.delegate = self;  
  41.     self.hud.labelText = @"正在处理";  
  42.     [self.hud showWhileExecuting:@selector(selectorForMPProgressHUD) onTarget:self withObject: nil animated:YES];  
  43.     [tempHud release];  
  44. }  
  45.   
  46. - (void) selectorForMPProgressHUD  
  47. {  
  48.     OSAtomicCompareAndSwapInt(0,   
  49.                               1,   
  50.                               &WAITING_RESPONSE_FOR_SERVERRESPONSE);  
  51.     [self performSelectorInBackground: @selector(tempSelector) withObject: nil];  
  52.     [self.condition lock];  
  53.     while (OSAtomicCompareAndSwapInt(1,   
  54.                                      1,   
  55.                                      &WAITING_RESPONSE_FOR_SERVERRESPONSE)) {  
  56.         NSDate* timeOutDate = [NSDate dateWithTimeIntervalSinceNow: 5.0f];  
  57.         [self.condition waitUntilDate: timeOutDate];  
  58.     }  
  59.     [self.condition unlock];       
  60. }  
  61.   
  62. - (void) notifyMPProgressHUDToDisappear  
  63. {  
  64.     //通知进度显示hud消失  
  65.     [self.condition lock];  
  66.     OSAtomicCompareAndSwapInt(1,   
  67.                               0,   
  68.                               &WAITING_RESPONSE_FOR_SERVERRESPONSE);  
  69.     [self.condition signal];  
  70.     [self.condition unlock];     
  71. }  
[cpp] view plaincopy
  1. - (void)hudWasHidden:(MBProgressHUD *)hud   
  2. {  
  3.     // Remove HUD from screen when the HUD was hidded  
  4.     [self.hud removeFromSuperview];  
  5.     self.hud = nil;  
  6. }  
  7.   
  8. - (void) tempSelector  
  9. {   
  10.     sleep(3.0f);//模拟真实的耗时操作   
  11.     [self notifyMPProgressHUDToDisappear];  
  12. }  
  13.   
  14. @end  
原创粉丝点击