欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-11-14 10:23:34
空字符串 在ios应用中,如果从网络请求数据,返回json或者是xml格式的数据时,经常会遇到空串,一般接口是用java等语言写的,如果是安卓,因为源语言都是java,只...

空字符串
在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。