首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持NSNull的核心数据

支持NSNull的核心数据
EN

Stack Overflow用户
提问于 2011-05-28 02:39:47
回答 3查看 1.6K关注 0票数 4

是否有可能获得核心数据以允许分配NSNull?我使用的是JSONKit,它默认分配NSNull。我更希望能够像这样进行反序列化:

代码语言:javascript
复制
- (void)deserialize:(NSDictionary *)dictionary
{
  self.name = [dictionary objectForKey:@"name"];
} 

而不是像这样:

代码语言:javascript
复制
- (void)deserialize:(NSDictionary *)dictionary
{
   NSNull *null = [NSNull null];
   NSString *value = [dictionary objectForKey:@"name"];
   self.name = (value != null) ? value : nil;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-28 02:55:25

一种想法是为NSDictionary创建一个类别。然后,该类别可以包含此行为。

票数 4
EN

Stack Overflow用户

发布于 2011-05-28 03:01:52

我不认为使用CoreData可以做到这一点。

但是如果代码简洁,如果你想要的是什么,你可以只使用宏:

代码语言:javascript
复制
#define NULL_NIL(_O) _O != [NSNull null] ? _O : nil
#define DICT_GET(_DICT, _KEY) NULL_NIL([_DICT objectForKey:_KEY])
#define DICT_GET_INT(_DICT, _KEY) [DICT_GET(_DICT, _KEY) intValue]
...

不是我想说的优化,但带来了简洁和可读的代码:

代码语言:javascript
复制
- (void)deserialize:(NSDictionary *)dictionary
{
  self.name = DICT_GET(dictionary, @"name");
} 
票数 4
EN

Stack Overflow用户

发布于 2011-07-06 01:57:44

如果你必须处理多种集合类型(不仅仅是字典),你可以在NSNull上创建一个类别:

代码语言:javascript
复制
@implementation NSNull (NSNull_nilIfNull)
+ (id)nilIfNull:(id)object {
    if (object == [self null]) {
        return nil;
    }
    return object;
}
@end

实施:

代码语言:javascript
复制
theValue = [NSNull nilIfNull:[array objectAtIndex:someIndex]];

但我必须说,它增加了不必要的冗长。我喜欢使用Vincent G的预处理器宏来保持代码的可读性的想法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6156386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档