Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • iOS版 微助手开发小结

    post by onelong / 2014-8-22 16:07 Friday [apple]

    iOS版的微助手,昨天通过了app store的审核,回忆这3个月的开发和上线之路,感觉收获还是很多的。在微助手之前,自己也开发上线过其他的iOS应用,但是没有微助手那么复杂的UI,也没有使用过那么多第三方的开源库。第三方库如何管理呢?以前的做法就是把代码导进去然后处理各种依赖,每次都觉得好麻烦。这次开发第一次使用了pods管理第三方库,使用这个工具进行管理,提高了效率。

    左滑菜单,由于是基于Android版本开发的,应用的主界面和菜单是同样的功能,在跳转的时候处理起来有点麻烦。最后选择了ViewDeck。

    网络库,由于ASI不支持ARC,还有使用起来比较麻烦,所以选择了AFNetworking,AFNetworking是个非常方便的工具,直接支持json,在最初的时候,由于配置的问题,导致服务器响应的json无法解析。最后通过设置

     [AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];

            //[self registerHTTPOperationClass:[AFJSONRequestOperation class]];

     

            [self setDefaultHeader:@"Accept" value:@"text/html"];

    解决了问题。当然开始那个头也是设置得有问题

     sharedClient.parameterEncoding = AFFormURLParameterEncoding;

     

    //sharedClient.parameterEncoding = AFJSONParameterEncoding;

    导致服务器获取不到参数。这样一来基本流程跑通了,接下来应该考虑的是二次封装一个网络框架,我们服务器返回的json数据固定格式的,每个请求都独立处理,这样维护好麻烦,当时参考了AFNetworking的封装,做了二次封装。

    - (void)getMyPath:(NSString *)path

         parameters:(NSDictionary *)parameters

            success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success

            failure:(void (^)(AFHTTPRequestOperation *operation,  NSString *errorString))failure

    {

        //IOS中显示和隐藏状态栏的网络活动标志

        //在向服务端发送请求状态栏显示网络活动标志:

        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

    [self getPath:path parameters:parameters success:^(AFHTTPRequestOperation *operation, NSDictionary *jsonData) {

            NSDictionary *header = [jsonData objectForKey:@"header"];

            if (header) {

                NSString *responseCode = [header objectForKey:@"responseCode"];

                if ([@"0000" isEqualToString:responseCode]) {

                    id body =[jsonData objectForKey:@"body"];

                    success(operation,body);

                }else{

                    failure(operation,header[@"responseMessage"]);

                }

            }else

            {

                failure(operation,@"数据异常");

            }

            //请求结束状态栏隐藏网络活动标志:

            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

            NSLog(@"%@",[error localizedDescription]);

            failure(operation,[error localizedDescription]);

            //请求结束状态栏隐藏网络活动标志:

            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

        }];

    }

     

    - (void)postMyPath:(NSString *)path

          parameters:(NSDictionary *)parameters

             success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success

             failure:(void (^)(AFHTTPRequestOperation *operation, NSString *errorString))failure

    {

        //IOS中显示和隐藏状态栏的网络活动标志

        //在向服务端发送请求状态栏显示网络活动标志:

        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

        

        

    [self postPath:path parameters:parameters success:^(AFHTTPRequestOperation *operation, NSDictionary *jsonData) {

            NSDictionary *header = [jsonData objectForKey:@"header"];

            if (header) {

                NSString *responseCode = [header objectForKey:@"responseCode"];

                if ([@"0000" isEqualToString:responseCode]) {

                    id body =[jsonData objectForKey:@"body"];

                    success(operation,body);

                }else{

                    failure(operation,header[@"responseMessage"]);

                }

            }else

            {

                failure(operation,@"数据异常");

            }

            //请求结束状态栏隐藏网络活动标志:

            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

            NSLog(@"%@",[error localizedDescription]);

            failure(operation,[error localizedDescription]);

            //请求结束状态栏隐藏网络活动标志:

            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

        }];

     

     

    }

    这样一来就很方便了。到这里网络的基本框架算是完成了。
    接下来还有思考另外一个问题,字典和对象映射,这种框架,网上有很多,但是最后选择了一个比较简单的。培训讲师明杰的MJExtension完成这个操作。
    一路走来,会发现自己了解到了很多东西,也学到不少东西。
     
    开发Android应用程序3年多了,开发iOS时,思想还是很借鉴Android的,图片缓存,异步加载图片,下拉刷新,图表库等都使用了第三方的库,开发起来也比较顺利。
    当然也在优化部分第三方库。
    由于服务器时Java的,所以才处理加密解密的时候也遇到一点点麻烦,最后还是很快的解决了,也是这样我突然意识到了解加密解密这本技术还是非常重要的。
     
    iOS开发,做UI的话,更多时候是熟练的操作UITableView,还有怎样处理UITextFiled的键盘,如微信的聊天界面。

    标签: ios
    引用地址:
     

    我要评论