【问题标题】:How can I catch NULL exceptions in iOS from json如何从 json 捕获 iOS 中的 NULL 异常
【发布时间】:2014-03-24 23:52:00
【问题描述】:

我的应用程序已经完成,我们正处于测试阶段。我注意到在我们的数据库中,有许多返回 null 的 json 数据,但不是大多数。有时名字数据为空,而姓氏有数据,反之亦然。我的应用程序在收到 NULL 实例时崩溃。

我怎样才能捕捉到这个 NULL 并为其创建一个例外(对于 json 数据的所有不同字段)?

【问题讨论】:

  • 首先是导致崩溃的代码。然后描述你到底想要什么——捕获异常?将 NULL 更改为一些默认值(如空字符串)?使用 NSNull 类?

标签: ios json nullpointerexception null


【解决方案1】:

有几种可能的解决方案。

1) 测试 NSNull

如果您只想测试 null(我假设为 NSNull),那么以下工作: How can I check If I got null from json?

2) 用字符串替换 NSNulls

如果您使用的是字典,并且只想用空字符串替换所有空值,那么这可能就是您要查找的内容: Replace all NSNull objects in an NSDictionary

3) NSDictionary 类别

我个人使用一个类别,它为 NSDictionary 添加了一个新方法。如果值为 NSNull,它只会返回 nil(最初来自 TouchJSON, dealing with NSNull

NSDictionary+Utility.h

#import <Foundation/Foundation.h>

@interface NSDictionary (Utility)

- (id)objectForKeyNotNull:(id)key;

@end

NSDictionary+Utility.m

#import "NSDictionary+Utility.h"

@implementation NSDictionary (Utility)

- (id)objectForKeyNotNull:(id)key {
    id object = [self objectForKey:key];
    if (object == [NSNull null]){
        return nil;
    }

    return object;
}

@end

实现类 (.m)

#import "NSDictionary+Utility.h"

...

id success = [JSON objectForKeyNotNull:@"success"];
if (success == nil){
    /* "success" either NSNull or didn't exist in JSON. */
}

【讨论】:

  • 感谢您的帮助。我对iOS相当陌生,所以我对应该将您提供的代码放在哪里一无所知。我尝试创建一个新的目标 c 类文件并在 .m 文件中实现它,但它不起作用
  • 没问题。我已经扩展了代码示例以展示如何使用它。
  • 只是澄清一下,“成功”是数据中的 json 字段对吗?
  • @Ian 我们如何实现该代码我的意思是,我创建了一个名为NSDictionary 的类文件并复制粘贴了该代码,但它不适用于我。为什么导入是这样的NSDictionary+Utility.h
  • 你不需要创建 NSDictionary - 它是一个核心的 Objective C 类/上面的代码被称为一个“类别”。这是一种将代码添加到现有类的方法(这样做通常比继承类更容易)。文件名“NSDictionary+Utility.h”只是一个约定,用于表示我们正在向 NSDictionary 添加功能。如果您有兴趣,以下页面有更多信息:developer.apple.com/library/ios/documentation/Cocoa/Conceptual/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2016-09-16
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
相关资源
最近更新 更多