ios-关于程序健壮性的问题

问题描述

关于程序健壮性的问题

从服务器获取到的数据或提交到服务器的数据有可能是nil,那我们是否需要对需要用到的每个数据都判断其是否为nil呢?
如果是的话,会不会有些繁琐? 尤其是当从服务器返回的数据或提交到服务器的数据比较多的时候。问一下该怎么保证
程序的健壮性同时又不让程序变得很臃肿。

这是我的从服务器获取数据的代码片段

      NSDictionary *data = responseObject[@"data"];
        NSArray *list = data[@"list"];
        //这个数组用于用户点击苗木列表时,给苗木详情页面传值
        if (_pageIndex == 1) {
            self.sapArr = [NSMutableArray arrayWithArray:list];
        }else{
            for (NSDictionary *item in list) {
                [self.sapArr addObject:item];
            }
        }

        for (NSDictionary *item in list) {
            HDNurseryItemModel *itemModel = [[HDNurseryItemModel alloc] init];
            itemModel.itemID = item[@"_id"];
            NSArray *imgArr = item[@"images"];
            if (imgArr.count > 0) {
                itemModel.iconName = imgArr[0];
            }
            itemModel.specID = [item objectForKey:@"specId"];
            NSString *mainSpec = [Util decodeSapType:[itemModel.specID integerValue]];
            NSInteger specMax = [[item objectForKey:@"specMax"]integerValue];
            NSInteger specMin = [[item objectForKey:@"specMin"]integerValue];
            NSInteger wocID = [[item objectForKey:@"planting"]integerValue];
            NSString *woc = [Util decodeWOC:wocID];
            //规格值
            NSString *finalSpec = [Util combineSpec:mainSpec specMax:specMax specMin:specMin];
            itemModel.loginName  = item[@"loginName"];
            itemModel.nickName = item[@"supplyLinkman"];
            itemModel.leftTitle = finalSpec;
            itemModel.rightTitle = woc;
            itemModel.describe= item[@"spec"];
            itemModel.price = [item[@"price"]floatValue] ;
            itemModel.stock = [item[@"quantity"] intValue];
            itemModel.addr = [NSString stringWithFormat:@"%@ %@",item[@"province"],item[@"city"]];
            itemModel.city = item[@"city"];
            itemModel.province = item[@"province"];
            itemModel.spec = item[@"spec"];
            itemModel.specID = item[@"specId"];
            itemModel.specMax = item[@"specMax"];
            itemModel.specMin = item[@"specMin"];
            itemModel.treeID = item[@"treeId"];
            itemModel.treeName = item[@"treeName"];
            itemModel.nurseryID = item[@"nurseryId"];
            itemModel.nurseryName = item[@"nurseryName"];
            itemModel.planting = item[@"planting"];
            itemModel.supplyflag = [item[@"supplyflag"] integerValue];
            [_dataSource addObject:itemModel];

这是提交到服务器的函数的代码片段

   NSString *treeID = realTarget.model.treeID;
                NSString *treeName = realTarget.model.treeName;
                NSString *specMin = realTarget.model.specMin;
                NSString *specMax = realTarget.model.specMax;
                NSString *spec = realTarget.model.spec;
                NSString *planting = realTarget.model.planting;
                NSString *price = [NSString stringWithFormat:@"%.2f",realTarget.model.price] ;
                NSString *quantity =[NSString stringWithFormat:@"%d",realTarget.model.stock] ;
                NSString *nurseryID = realTarget.model.nurseryID;
                //        NSString *nurseryName = realTarget.model.nurseryName;
                NSString *specID = realTarget.model.specID;
                NSString *city = realTarget.model.city;
                NSString *province = realTarget.model.province;
                NSString *seedlingID = realTarget.model.itemID;
                NSString *type = @"1";
                NSString *loginName = [Util getLoginNameFromUserDefault];
                NSString *nickName = [Util getNickNameFromUserDefault];
                NSString *userID = [Util getUserIDFromUserDefault];
                NSDictionary *param = [NSDictionary dictionaryWithObjects:@[userID,treeID,treeName,specMin,specMax,spec,planting,price,quantity,nurseryID,loginName,nickName,specID,city,province,type,seedlingID]  forKeys:@[@"ym.memberId",@"ym.treeId",@"ym.treeName",@"ym.specMin",@"ym.specMax",@"ym.spec",@"ym.planting",@"ym.price",@"ym.quantity",@"ym.nurseryId",@"ym.pLoginName",@"ym.pNickName",@"ym.specId",@"ym.city",@"ym.province",@"ym.type",@"ym.seedlingId"]];
                NSLog(@"param:%@",param);

解决方案

程序的健壮性
程序的健壮性
何谓程序的健壮性

解决方案二:

需要判断,不只是判断服务器返回的数据是否为空,还要判断是否是字符串类型,如果服务器返回的是其他类型的数据,其他类型的数据赋给字符串的变量就会出现崩溃;而且在上传数据的时候,如果有的字段数据为空也是会出现崩溃问题;所以还是要判断。我自己就封装成一个特定的函数来判断这些异常情况。

解决方案三:

一个是健壮性的问题、一个是臃肿的问题;首先要保证的是健壮性,在健壮性的基础性,尽量去优化程序,对一些共性的东西去封装,尽量达到不臃肿的状态。对照的自己的编程经验,首先字段尽量去专门放到一个.h文件宏定义,这样服务器字段变化你只需要改.h的宏定义对应第字段就可以了;其次提交数据最后用可变字典去存放,判断一个字段,存放一个字段;然后从服务器取得数据进行模型赋值,如果数据过多,然后把这些数据的赋值也封装一个函数,这样不至于一个函数过大(臃肿)。

解决方案四:

其实你可以写个工具类用于处理异常。逻辑缜密就不会有健壮的问题

解决方案五:

这玩意就是吃一次亏上一次当的问题 java 就没有这么脆弱 也就那几个注意点 比如说什么nsmutableArray 不能add nil 。。。。之类的 看到这些的时候考虑一下就可以了

时间: 2024-09-11 14:35:44

ios-关于程序健壮性的问题的相关文章

cpu-是否提高了C#应用程序的健壮性同时就降低了CPU的性能?

问题描述 是否提高了C#应用程序的健壮性同时就降低了CPU的性能? 我是基于DoNetFrameWork4.0写的一个WinForm程序在测试程序健状性时我在程序多写了几个判断语句一运行我靠CPU性能一下就升到了90%多太吓人了用的C#语言写的我知道C#在DoNetFrameWork中要先编译成""微软公共语言""再编译成""二进制""给CPU执行我只是在一个if()的里面加了一个或者:即if(||)原文如下:if (((bi

Java核心技术卷I基础知识1.2.4 健壮性

1.2.4 健壮性 Java的设计目标之一在于使得Java编写的程序具有多方面的可靠性.Java投入了大量的精力进行早期的问题 检测.后期动态的(运行时)检测,并消除了容易出错的情况--Java和C++最大的不同在于Java采用的指 针模型可以消除重写内存和损坏数据的可能性. Java编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题.至于第二点,对于曾经花费几个 小时来检查由于指针bug而引起内存冲突的人来说,一定很喜欢Java的这一特性.

在Visual Studio中使用MonoTouch开发iOS应用程序(下):开发体验

对于熟悉.NET程序员来说,编写iOS应用程序的最佳选择自然是MonoTouch.在上一篇文章里,我们已经在Mac OS X上安装了MonoTouch开发环境,并已经能够在Mac OS X和Windows之间共享文件.现在我们就可以来简单体验一下,如何使用Visual Studio,Interface Builder以及少量的MonoDevelop来开发一个最最简单的iOS应用程序. 新建项目 根据我的个人习惯,我会先创建一个空白的解决方案.首先在Mac OS X中打开MonoDevelop,然

ios闹钟程序-iOS闹钟程序实现的过程

问题描述 iOS闹钟程序实现的过程 求iOS闹钟程序实现的过程,不要是早几年的,新版本的,感激不尽,非常感谢 解决方案 http://download.csdn.net/detail/u012524508/6431991

《iOS创意程序设计家》——第6.4节事件检测

6.4 事件检测 iOS创意程序设计家 界面控制器除了负责界面的管理以及布局外,还负责事件的传递.这些事件包括我们在第5章已经介绍过的触控事件,还有接下来要介绍的晃动检测事件.这些事件都定义在UIResponder类里面,而无论是界面控制器UIViewController还是界面UIView,它们都继承自UIResponder类. 6.4.1 晃动检测 首先,我们来看看晃动事件的处理.与触控事件类似的是,晃动检测也是由一连串的事件所组成的,不过,要让您的应用程序支持晃动检测,必须让您的界面控制器

ios-实现iOS闹钟程序的问题

问题描述 实现iOS闹钟程序的问题 实现iOS闹钟程序,应该怎么弄呢?应该从那入手,求iOS闹钟代码,非常感谢!(新手) 解决方案 http://blog.sina.com.cn/s/blog_5fae23350102dwf5.html 解决方案二: iOS闹钟实现用C语言实现的闹钟程序 解决方案三: 这个闹钟可以..照着写一遍,建议还是弄懂

【IOS开发必收藏】详解IOS应用程序内使用IAP/STOREKIT付费、沙盒(SANDBOX)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/550.html //--2012-12-11日更新   获取"产品付费数量等于0这个问题"的原因 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 "Contracts, Tax, and Banking "没

【Xamarin挖墙脚系列:Xamarin.IOS的程序的结构】

原文:[Xamarin挖墙脚系列:Xamarin.IOS的程序的结构] 开始熟悉Xamarin在开发IOS的结构!!!!!!!   先看官方   这个是以一个单页面的程序进行讲述的. 1 程序引用的程序集,核心的Xamarin.IOS 程序集,包含了对应版本的API 2 组件   官方商城上的组件 3 资源文件 位图  音频  视频等文件 4 Main.cs  定义程序启动入口 5  AppDelegate.cs 程序启动后,定义窗口容器,并接收来自系统的事件消息. 6 Main.storybo

IOS应用程序发布到苹果APP STORE

参考: http://blog.csdn.net/mad1989/article/details/8167529(xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核))  http://www.ttlsa.com/dev/how-to-publish-iosapp-to-appstore/  (如何发布IOS应用程序到苹果APP STORE)  开发环境:xcode5.1.1 iPhonesdk:7.1 开发机器:iMac 真机部署测试:apple个人开发者ID 向导: