gpt4 book ai didi

iphone - 如何检查 NSNumber 中的空值

转载 作者:行者123 更新时间:2023-12-03 18:53:18 27 4
gpt4 key购买 nike

首先我承认我的无知,在我从事项目的几个月里我已经学到了关于 Objective-C 的一切。我还发现,Objective-C 似乎使我使用过的任何其他语言中的简单问题变得复杂,这非常令人沮丧。这个问题就是一个例子......

在第一次运行中,我的应用程序下载了一堆 JSON,用于填充 CoreData 存储。我使用 Obj-C/JSON 库 (CJSONDeserializer) 将 JSON 转换为 NSArray。在一个 CoreData 实体的 JSON 下载中,有一个包含数字 ( "show_id":2 ) 的字段,如果有一个或为 null ( "show_id":null ),则标识另一个实体中的相关字段。在处理该字段时,我使用以下方法将其分配给 NSNumber:

NSNumber *shoIndex = [[item objectForKey:typeKey] objectForKey:@"show_id"];

然后,在尝试获取和链接相关记录之前,我会尝试检查我是否拥有有效的号码,以免在没有相关记录的情况下进行浪费处理。

审问shoIndex与...

NSLog(@"shoIndex: %i, %@, %@", shoIndex, shoIndex, [shoIndex description]);

给予...

shoIndex: 19590600, <null>, <null>

其中 JSON 值为 null &...

shoIndex: 228300880, 51, 51

否则。

到目前为止,我所做的唯一成功的检查是...

if (![[shoIndex description] isEqualToString:@"<null>"]) {

谁能提出更好的方法吗?

更新...

换个角度看 shoIndex被指定为NSNumber有时包含 NSString@"<null>" 。 Obj-C 有类似 isa 的东西吗?我可以用它来检查 shoIndex 内容的类型?

TIA,佩德罗。

最佳答案

使用[shoObject class]获取对象的类;因此,要测试 shoObject 的类,您可以使用

[shoObject isKindOfClass:[NSString class]];

一旦你弄清楚了哪些标记定义了空字符串或 NSNumber,你就可以创建一个宏。我通过在名为 CommonMacros.h 的文件中保留 IsEmpty 宏来实现此目的。代码如下:

//Thanks Wil
//http://wilshipley.com/blog/2005/10/pimp-my-code-interlude-free-code.html

static inline BOOL IsEmpty(id thing) {
return thing == nil
|| ([thing isEqual:[NSNull null]]) //JS addition for coredata
|| ([thing respondsToSelector:@selector(length)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [(NSArray *)thing count] == 0);
}

然后,导入CommonMacros.h后,您可以像这样调用该函数:

if (IsEmpty(shotIndex)) {
//do stuff
}

这应该可以解决这个问题,并且也适用于字符串、数组等,正如您从代码中看到的那样。感谢威尔·希普利!

关于iphone - 如何检查 NSNumber 中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4231318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com