成都网站建设设计

将想法与焦点和您一起共享

ios开发中怎么实现容错处理

ios开发中怎么实现容错处理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

10年的莲都网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整莲都建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“莲都网站设计”,“莲都网站推广”以来,每个客户项目都认真落实执行。

具体如下:

写个工具类,判断处理每个字段是不是[NSNull null]对象,或者判断是不是isEqual:@"";

用AFNetworking作为网络请求的话,可以设置以下变量为YES;

// AFURLResponseSerialization.h
/**
 Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`.
 */
@property (nonatomic, assign) BOOL removesKeysWithNullValues;

大牛写了个NSNull分类:源码地址 (本地下载)用法是直接将该类拖到项目中即可,NullSafe思路:在运行时操作,把空值置换为nil,而向nil指针发送消息是不会崩溃的。

我这里主要说的是第三种解决方案,我将该项目从github上下载到本地,然后拖到项目中后,本以为这样就可以解决问题了,因为自己写了个测试demo,给UILabel赋值null,没有拖进去该库时直接崩溃了,将该库拖进项目后发现项目正常运行。所以就认为可以一劳永逸了,但是在项目中测试时,发现仍然出现崩溃的现象,打断点调试后,发现后台传回的数据是"",而NSNull分类中只是判断了数据是否是NSNull类型,如果是NSNull类型,就将其设置为nil,然而后台传回的数据是"",它并不是NSNull类型,所以仍然会崩溃,所以我在该项目的基础上,加了个是否等于的判断,如果条件成立,则将其设置为nil,这样就可以避免后台传回我们不想要的数据而导致崩溃的问题了,修改后的代码如下:

- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
{
 //look up method signature
 NSMethodSignature *signature = [super methodSignatureForSelector:selector];
 if ([signature isEqual:@""]) {
 
 signature = nil;
 
 }else if ([signature isKindOfClass:[NSNull class]]) {
 
 signature = nil;
 
 }else if (!signature) {
 
 //check implementation cache first
 NSString *selectorString = NSStringFromSelector(selector);
 signature = signatureCache[selectorString];
 if (!signature)
 {
  @synchronized([NSNull class])
  {
  //check again, in case it was resolved while we were waitimg
  signature = signatureCache[selectorString];
  if (!signature)
  {
   //not supported by NSNull, search other classes
   if (signatureCache == nil)
   {
   if ([NSThread isMainThread])
   {
    cacheSignatures();
   }
   else
   {
    dispatch_sync(dispatch_get_main_queue(), ^{
    cacheSignatures();
    });
   }
   }
   
   //find implementation
   for (Class someClass in classList)
   {
   if ([someClass instancesRespondToSelector:selector])
   {
    signature = [someClass instanceMethodSignatureForSelector:selector];
    break;
   }
   }
   
   //cache for next time
   signatureCache[selectorString] = signature ?: [NSNull null];
  }
  }
 }
 }
 return signature;
}

当然也可以去github下载,源码地址 (本地下载),但是需要加上下图所示的代码:

ios开发中怎么实现容错处理

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


当前题目:ios开发中怎么实现容错处理
当前URL:http://chengdu.cdxwcx.cn/article/gsihji.html