SVN资源修改后删除所有 .svn 相关信息方法:
find ./ -name ".svn" -exec rm -r {} \;
1:XMLParse 第三方库
谷歌的GDataXMLNode.h 和 GDataXMLNode.m 文件; 网上有很多这方面的介绍,就无需多言了。
但是我们的项目需要,需要对其进行简单的修改,就是交换两个节点数据以及忽略节点的大小写敏感,这
是该类所不支持的,所以对代码做了一些小修改,不过对于属性名大小写不敏感还不知道怎么修改,有知
道的朋友请赐教,谢谢先,下面是我对代码做的小修改:
在GDataXMLNode.h 文件中加入一个 replaceChild 函数:
@interfaceGDataXMLElement :GDataXMLNode
- (id)initWithXMLString:(NSString*)str error:(NSError **)error;
- (NSArray *)namespaces;
- (void)setNamespaces:(NSArray*)namespaces;
- (void)addNamespace:(GDataXMLNode*)aNamespace;
// addChild adds a copy of the child node to theelement
- (void)addChild:(GDataXMLNode*)child;
- (void)removeChild:(GDataXMLNode*)child;
- (void)replaceChild:(GDataXMLNode*)old cur:(GDataXMLNode*)cur;//add by me
在GDataXMLNode.m文件中加入其实现代码:
- (void)replaceChild:(GDataXMLNode*)old cur:(GDataXMLNode*)cur{
assert([oldkind] !=GDataXMLAttributeKind&& [curkind] != GDataXMLAttributeKind);
if (xmlNode_!=NULL&& cur != NULL && old!=NULL) {
[selfreleaseCachedValues];
xmlNodePtroldNode = [oldXMLNode];
xmlNodePtrcurNodeCopy = [curXMLNodeCopy];
if(curNodeCopy) {
xmlNodePtrresultNode =xmlReplaceNode(oldNode, curNodeCopy);
if(resultNode ==NULL) {
// failed to add
xmlFreeNode(curNodeCopy);
} else {
// added this child subtree successfully; see if it has
// previously-unresolved namespace prefixes that can now befixed up
//[[self class] fixUpNamespacesForNode:curNodeCopy
//graftingToTreeNode:xmlNode_];
}
}
}
}
调用端结点位置交换代码实现:
GDataXMLElement*pos1Ele = (GDataXMLElement*)[arrGroupobjectAtIndex:pos1];
GDataXMLElement*pos2Ele = (GDataXMLElement*)[arrGroupobjectAtIndex:pos2];
[rootElement replaceChild:pos1Ele cur:pos2Ele];
[rootElement replaceChild:pos2Elecur:pos1Ele];
忽略结点大小写敏感的代码修改(结点属性名的大小写忽略不知道怎么改,有知道的朋友请赐教)
- (NSArray*)elementsForName:(NSString *)name {
* ****
// if ([qName isEqual:name]){ //deleteit
if(NSOrderedSame==[qNamecompare:nameoptions:NSCaseInsensitiveSearch]){//add
中文出现乱码问题:
就是在创建GDataXMLDocument之后马上调用其setCharacterEncoding这个函数,参数随便,库代码中没有对其处理,内部代码硬编码为UTF8String
staticxmlChar*GDataGetXMLString(NSString *str) {
xmlChar*result = (xmlChar *)[strUTF8String];
returnresult;
}
二:AFNetWorking 第三方网络库
0:为了方便;在工程的 –Prefix.pch文件中添加 #import"AFNetworking.h"
1:首先阅读下载的文档 readme.md文件。
2: 常用的使用方式在readme.md文件中都有描述,在这里提一下在使用该类库所遇到的一些问题。
* :下载进度处理,需要将信息返回给UI,如何发送一个异步通知:
dispatch_async(dispatch_get_main_queue(),^{
/* handle */ //注意这段代码就是主线程来执行了(每个线程有其自己的数据栈)
});
3: JSON数据返回问题:
NSStringweatherUrl= @http://**”;
NSURL*url = [NSURLURLWithString:weatherUrl];
NSURLRequest*request = [NSURLRequestrequestWithURL:url];
//[AFJSONRequestOperation addAcceptableContentTypes:[NSSetsetWithObject:@"text/html"]];
AFJSONRequestOperation*operation =
[AFJSONRequestOperationJSONRequestOperationWithRequest:request
success:^(NSURLRequest*request,NSHTTPURLResponse *response,idJSON) {
NSLog(@"JSONRequestOperationWithRequestok, %@", [JSONdescription]);
} failure:^(NSURLRequest*request,NSHTTPURLResponse *response,NSError*error,id JSON)
{
NSLog(@"failreason=%@", error.description);
}];
[operationstart];
在MRR 有 storyboard 的情况下将该上述代码放在 viewDidLoad中可以正常返回,
但是将上述代码放在MRR 但是没有 storyboard 的代码里面,在AFURLConnectionOperation里面下属代码就出现了错误。
+ (void)networkRequestThreadEntryPoint:(id)__unusedobject {
do {
@autoreleasepool {
[[NSRunLoopcurrentRunLoop]run];//EXC_BAD_ACCESS (code=1, address=0xb06a9806)
}
} while (YES);
}
有时候还有返回 code 1061 错误:
Code=-1016 "Expected content type {( "text/json", "text/javascript", "application/json")}, got text/html"
网上找了很多资料都是说:
[AFJSONRequestOperationaddAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];
加上这么一行代码,但是我发现并不可以。不知道是为什么,后来一同事帮我用下面的方法实现json数据返回:
NSString(资源网址)->NSURLàNSData(json数据的二进制格式)—》NSJSONSerializationà返回可读的json数据格式:
NSString* reqURlString= stringUrl;
[FeixinEmShopgetInstance]_baseUrl],[versionstringValue]];
NSURL*url = [NSURLURLWithString:reqURlString];
NSData*jsonData = [[NSDataalloc]initWithContentsOfURL:url];//最重要的就是这个
if(nil ==jsonData)
{
NSLog(@"error-theexpect result can't be responsed causing for the error url or nonstandard jsonformat, the url is %@", reqURlString);
return ;
}
NSDictionary*dic;
dic= [NSJSONSerializationJSONObjectWithData:jsonDataoptions:NSJSONReadingMutableLeaveserror:nil];
NSLog(@"%@",dic);
三:ZipArchive库
解压代码:如果dstPath没有创建,该库会自动创建, dstPath文件如果已经存在,overWrite:YES执行文件夹覆盖操作,文件会被重命名为后缀为_bak的文件名。
+(BOOL) unzip:(NSString*)dstPath:(NSString*)srcPath
{
//实现解压操作
assert(srcPath!=nil&& dstPath!=nil);
ZipArchive* zip = [[ZipArchivealloc]init];
if( [zipUnzipOpenFile:srcPath] )
{
BOOL ret = [zipUnzipFileTo:dstPathoverWrite:YES];
if(NO==ret )
{
returnNO;
}
[zip UnzipCloseFile];
}
[zip release];
returnYES;
}
四:IOS 文件读写
*在ios里面有一个沙盒的概念。
*Bundle是什么?
Bundle其实就是资源,但是他是只读的。也就是存放在 {工程名}.app/{资源}
*每个app对应一个自己的Documents, 这里面可以存放网络上下载的资源。
本地html文件访问:
NSURLfileURLWithPath:@http://**”;
网络html文件访问:
[NSURLalloc]initWithString:@http://**”;
*获取应用程序的Documents目录方法:
+(NSString*)getDocumentDirectory
{
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];
}
*读取Bundle文件目录方法:
NSString* srcAppPath= [[NSBundlemainBundle]bundlePath];
*创建目录,创建文件
[[NSFileManagerdefaultManager]createDirectoryAtPath:newDir];
[[NSFileManagerdefaultManager]createFileAtPath:newFile]
*删除目录或文件
[[NSFileManagerdefaultManager]removeItemAtPath:filePath/dirPath];
五:NSString常用方法 (包含本地文件及网络文件路径解析部分)
六:UIWebView 与 Javascript之间通信
七:网络优化方案
通过将本地资源打包+资源自升级完成不常用资源的自动更新,实现本地资源的快速更新显示,对于动态经常变化的资源使用网络请求,改善用户体验。
八:中间考虑的问题:
1:页面切换——客户端通过UIWebView与页面交互,数据状态的考虑。
2:页面加载阶段与客户端对应控制时机:
主要有两个,页面首次加载及加载完成后注入javascript。
对因的就是UIWebView的UIWebViewDelegate的
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
完成加载:
- (void)webViewDidFinishLoad:(UIWebView*)webView
3:进程间通信
当一个进程进入后台后,是否还能有能力获取到通知;
通过 URL Schema方式,进程间通信是否与数据量大小限制
4: 文件的访问控制
5: 版本发布是否能通过apple的审核,开发时需要注意什么?
6:用户体验
* 多线程下载,断点续传,分页加载
* 网络加载改成本地资源加载
* 图标对于非透明图片将png改成jpg格式,png比jpg多了一份通道数据。
* 减少http连接请求,在网络状态不好的情况下,真机上需要占用4~5秒甚至更长的时间。
尽可能返回更多的数据。
* 对资源加密,下载后对资源解密,减少资源下载所需要的时间
* 用户对于非必要资源下载占用流量的考虑
7:资源的md5加密。