广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    Objective-C处理空字符串和页面传值及自定义拷贝

    2018-04-05 08:31:40 次阅读 稿源:互联网
    广告

    空字符串
    在ios应用中,如果从网络请求数据,返回json或者是xml格式的数据时,经常会遇到空串,一般接口是用java等语言写的,如果是安卓,因为源语言都是java,只需判断是否等于null即可,但是在ios中会出现各种各项的形式,比如null,(null),<null>。
    如果单纯用
    代码如下:

    string!=nil;

    无法判断出尖括号的空串

    完整判断方法
    代码如下:

    -(BOOL)isNull:(id)object
    {
        // 判断是否为空串
        if ([object isEqual:[NSNull null]]) {
            return NO;
        }
        else if ([object isKindOfClass:[NSNull class]])
        {
            return NO;
        }
        else if (object==nil){
            return NO;
        }
        return YES;
    }

    对空串进行发消息会出现各种各样的崩溃,让人很无语,同理转换字符串
    代码如下:

    -(NSString*)convertNull:(id)object{
     
        // 转换空串
     
        if ([object isEqual:[NSNull null]]) {
            return @" ";
        }
        else if ([object isKindOfClass:[NSNull class]])
        {
            return @" ";
        }
        else if (object==nil){
            return @"无";
        }
        return object;
        
    }

    页面传值和自定义拷贝
    做网络相关的一些问题时,有时候值比较多,自定义个一个类,想把这个类的整个部分的值传到另一个界面,这就涉及到拷贝问题,自定义的类里一定要实现NSCopying协议,写上拷贝的方法- (id)copyWithZone:(NSZone *)zone,这样这个类才会像NSString类一样,可以用=赋值拷贝。
    自定义一个TypesItem类,继承自NSObject,含有三个变量(可自定义添加多个)

    TypesItem.h

    代码如下:

    #import <Foundation/Foundation.h>
     
    @interface TypesItem : NSObject<NSCopying>
    {
        NSString *type_id;
        NSString *type_memo;
        NSString *type_name;
    }
    @property (nonatomic,copy) NSString *type_id;
    @property (nonatomic,copy) NSString *type_memo;
    @property (nonatomic,copy) NSString *type_name;
     
     
    @end

    TypesItem.m文件中,除了要synthesize这三个变量之外

    代码如下:

    @synthesize type_id,type_memo,type_name;


    还要实现NSCopying协议方法
    代码如下:

    - (id)copyWithZone:(NSZone *)zone

    - (id)copyWithZone:(NSZone *)zone
    {
        TypesItem *newItem = [[TypesItem allocWithZone:zone] init];
        
        newItem.type_name = self.type_name;
        newItem.type_id = self.type_id;
        newItem.type_memo = self.type_memo;
        return newItem;
    }

    页面间传值,假设A->B,A中的TypeItem的值要传到B中

    在B中.h文件写上代码
    代码如下:

    @property(nonatomic,copy) TypesItem *selectedItem;

    在B.m文件中
    代码如下:

    @synthesize selectedItem;

    在A.m中跳转到B之前加上代码
    代码如下:

    BViewController *BVC = [[[BViewController alloc] initWithNibName:@"BViewController" bundle:nil] autorelease];
      
        // item为TypeItem类型,且不为空
      
        BVC.selectedItem = item;
        
        [self.navigationController pushViewController:BVC animated:YES];

    PS:页面间传值时,此处的BVC.selectedItem中的BVC一定与push过去的BVC保持一致,否则push到B界面中的selectedItem值必定为null。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告