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

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

(0)

相关推荐

  • Oracle数据库中对null值的排序及mull与空字符串的区别

    order by排序之null值处理方法 在对业务数据排序时候,发现有些字段的记录是null值,这时排序便出现了有违我们使用习惯的数据大小顺序问题.在Oracle中规定,在Order by排序时缺省认为null是最大值,所以如果是ASC升序则被排在最后,而DESC降序则排在最前.所以,为何分析数据的直观性方便性,我们需要对null的记录值进行相应处理. 这是四种oracle排序中NULL值处理的方法: 1.使用nvl函数 语法:Nvl(expr1, expr2)     若EXPR1是NULL,

  • IE6/7/8中Option元素未设value时Select将获取空字符串

    如下 复制代码 代码如下: <!DOCTYPE HTML> <html> <head> <title>IE6/7/8中Option元素未设value时Select将获取空字符串</title> </head> <body> <select onchange="alert(this.value)"> <option>one</option> <option>

  • 总结C#删除字符串数组中空字符串的几种方法

    前言 随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.但C#3.0新增的lambda表达式就可以很方便实现这个功能,下面一起看看为大家整理的几种清除数组中的空字符串的方法,有需要的可以参考学习. 方式一:使用lambda表达式筛选过滤掉数组中空字符串 /// <summary> /// 使用lambda表达式排除/过滤/清空/删除掉字符串数组中的空字符串 /// </summary> //

  • Linux fgetcsv取得的数组元素为空字符串的解决方法

    但服务器上,很多使用Linux服务器,源程序使用UTF-8,这样很容易产生字符编码的问题. 如果仅仅将CSV文件转码为UTF-8,这样在Windows服务器上没有问题, 而在RedHat5.5上,用fgetcsv取得的数组中,如果某列的内容是中文,则该列对应的数组元素为空字符串,而英文则正常. 这时,需要设置区域: setlocale(LC_ALL, 'zh_CN.UTF-8'); 代码如下 复制代码 代码如下: // 上传的CSV文件,通常是用Excel编辑的GBK编码, // 而源代码是UT

  • C#几种截取字符串的方法小结

    1.根据单个分隔字符用split截取 例如 复制代码 代码如下: string st="GT123_1"; string[] sArray=st.split("_"); 即可得到sArray[0]="GT123",sArray[1]="1"; 2.利用多个字符来分隔字符串 例如 复制代码 代码如下: string str = "GTAZB_JiangjBen_123";string[] sArray = s

  • c语言中用字符串数组显示菜单的解决方法

    以前写菜单方面东西时往往重复, 发现这个方法还可以, 用一个指针的指针解决遍历问题.代码如下所示: 复制代码 代码如下: #include <stdio.h>static char *menu[] = {  "1 --- push one item./n",  "2 --- pop one item./n",  "3 --- quit./n",  NULL};void Show_menu();int main(){ Show_menu

  • C 字符串数组排序的小例子

    复制代码 代码如下: #include<stdio.h>#include<string.h>#include <malloc.h>void q_sortB(char str[20][20], int n);void qs(char str[20][20],int n); void main() {    int i, n;    char str[20][20] = { { "Adam" }, { "Bob" }, { "

  • C# Stream 和 byte[] 之间的转换

    /* - - - - - - - - - - - - - - - - - - - - - - - -   * Stream 和 byte[] 之间的转换  * - - - - - - - - - - - - - - - - - - - - - - - */ /// <summary> /// 将 Stream 转成 byte[] /// </summary> public byte[] StreamToBytes(Stream stream) {     byte[] bytes 

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

    空字符串 在ios应用中,如果从网络请求数据,返回json或者是xml格式的数据时,经常会遇到空串,一般接口是用java等语言写的,如果是安卓,因为源语言都是java,只需判断是否等于null即可,但是在ios中会出现各种各项的形式,比如null,(null),<null>. 如果单纯用 复制代码 代码如下: string!=nil; 无法判断出尖括号的空串 完整判断方法 复制代码 代码如下: -(BOOL)isNull:(id)object {     // 判断是否为空串     if (

  • vue前端传空值、空字符串的问题及解决

    目录 vue前端传空值及空字符串问题 vue空值报错问题 vue前端传空值及空字符串问题 在与后端调试接口时,经常接口里的参数会有空值,如果每次都要后端写判断,代码容易冗余. 所以就在前端做判断,在传值时先判断接口参数是否为空,为空则不传,有值则传参. 这里的例子是vue 列表接口获取全部列表值 一般列表页面都做了搜索和分页功能,所以带的参数就有:搜索字段.当前页码.页码最大数值(param,pageNo,pageSize)只是举例,不一定是一模一样 在加载列表接口时,这些条件会拼接到接口url

  • asp.net 页面传值的几个方法

    在这篇文章里,azamsharp 将为我们介绍一些ASP.NET页面传值的方式.本文所举的例子非常简单,仅仅包含了一个文本框和几个按钮,当按钮点击时文本框中的字符串将会以不同的方式传递到另外的页面去. 1. Response.Redirect (或称 Query String 方式.URL方式) 复制代码 代码如下: Response.Redirect("WebForm5.aspx"); 首先让我们看看 Response.Redirect 方法,这应该是最简单的了,当我们点击Respo

  • 微信小程序 页面传值详解

    微信小程序 页面传值详解 一. 跨页面传值. 1 . 用 navigator标签传值或 wx.navigator, 比如 这里将good_id=16 参数传入detail页面, 然后detail页面的 onload方法内接受. 如果需要传多个参数, 用 & 链接即可 如果要传 数组, 字典等复杂类型, 要先用 JSON.stringify() 转成字符串传递. 注 : 如果转化的字符串中 有"?"这个符号, 则只会传递"?"以前的字符串, 这个问题我猜想可能

  • layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例

    父层: jsp中: //页面上添加一个隐藏的输入框待用于被子层设置value,从而将子层的数据传递到此页面 <input type="hidden" id="getValue" name="getValue" value="" /> js代码: //设置function,当执行时,弹出子窗口并传递当前窗口名称 //弹出子窗口(选择商家) function choseMerchant() { //获取当前窗口名称 v

  • Spring向页面传值和接受页面传过来的参数详解

    本文主要给大家介绍了关于Spring向页面传值和接受页面传过来的参数的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 一.从页面接收参数 spring MVC接收请求提交的参数值的几种方法: 1.使用HttpServletRequest获取. @RequestMapping("/login.do") public String login(HttpServletRequest request){ String name = request.getParameter(&qu

  • 在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法

    最近,在项目中使用到了layer.layer的弹层组件可以说是非常好用,layer 至今仍作为 layui 的代表作.在项目中,需要实现一个在表格里面点击操作,然后弹出layer层,将父层表格的行值传给子页面,子页面拿到值后,进行业务处理,从而实现真正的父子页面交互. 其实,官方文档都说的很清楚了. layui官方文档:http://layer.layui.com/ 使用版本:2.3.0 只是,需要我们耐心的读懂文档内容,然后根据自己的业务情况,实现自己想要的效果. 一.子页面获取父页面数据 子

  • 微信小程序实现两个页面传值的方法分析

    本文实例讲述了微信小程序实现两个页面传值的方法.分享给大家供大家参考,具体如下: 需求:发送页面通过url传值,接收页面获取值. 发送页面的js var nowid='10'; wx.navigateTo({ url: '../index/index?id='+nowid, }) 或者发送页面用navigate 组件: <navigate url="xxx?id=10"></navigate > 如果id是page里面data的数据.是动态的,那么可以写成: &

  • Flutter页面传值的几种方式

    今天来聊聊Flutter页面传值的几种方式: InheritWidget Notification Eventbus (当前Flutter版本:2.0.4) InheritWidget 如果看过Provider的源码的同学都知道,Provider跨组件传值的原理就是根据系统提供的InheritWidget实现的,让我们来看一下这个组件. InheritWidget是一个抽象类,我们写一个保存用户信息的类UserInfoInheritWidget继承于InheritWidget: class Us

  • Android Activity活动页面跳转与页面传值

    目录 概述 Intent 显示Intent启动 隐式Intent启动 启动其他程序 网页浏览 拨号界面 根据包名打开软件 根据类名打开界面 startActivityForResult 主页面 跳转界面 页面传值 Intent.putExtra 传值 借助 Bundle 传值 概述 Android开发少不了的就是页面之间的跳转,或者想要呼叫打开其他应用等 Intent Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的运作,还可以在不同组件之间传递

随机推荐