2015-12-21 20 views
0

我做了一个的NSDictionary,说特定对象后的NSDictionary为空?

NSDictionary *question = [NSDictionary dictionaryWithObjectsAndKeys: 
            variable_first,@"first", 
            variable_second,@"second", 
            variable_third,@"third", 
            variable_fourth,@"fourth", 
            variable_fifth,@"fifth", 
             nil]; 

这里,如果

variable_first variable_second variable_third variable_fourth variable_fifth中的任何一个

比,字典不会保存任何键开始。

可以这么说,如果variable_third从服务器是空的,比variable_fourth & variable_fifth不会被添加,不管它们是否有值。

我可以在任何地方看到苹果写了这个,或者任何想法为什么Objective-C显示这样的行为?

谢谢。

+1

鉴于该列表是'nil'终止,人们可以很容易推断出'dictionaryWithObjectsAndKeys:'节省了两双数据,直到遇到'nil' – Arc676

+1

variable_first variable_first:[NSNull空],@“第一”用这种方式 –

+0

创建字典时,首先检查所有5个变量值,如果它们为空,则将它们设置为空,然后分配给字典。 – poojathorat

回答

1

那怎么NSDictionary的作品,阅读文档。它停在第一个零对象上。第一个零值通常应该是最后添加的零,但如果其他值为零,则这是dictionaryWithObjectsAndKeys停止的位置。

可以使用现代语法@ {键:值,键:值,...}

在这种情况下,如果任何值是零,你的应用程序会崩溃。这比默默行为不当的100倍,因为应用程序崩溃,你找到原因,你修复它。

修复:您不能尝试将nil对象添加到字典中。有两种方法,你需要决定你想要哪一个:或者你从一个可变的字典开始,并且只添加那些值不为零的键/值对。或者你添加一个值[NSNull null]而不是nil给字典。显然,当你访问字典时,有一种情况下这些值将返回nil,在另一种情况下,它们将返回[NSNull null]。无论你喜欢什么。

0

您可以覆盖所有这些变量的吸气这样

-(NSString*) variable_first { 
    if(!_variable_first){ 
    _variable_first = @""; 
    } 
    return _variable_first; 
} 

这样即使variable_first是从服务器空,你会增加它在你的字典里一个空字符串,这个问题你正面临不会发生。

+0

没有乌萨马,它不是一个好主意,可以覆盖每一个对象。我有通用的方法。我知道如何处理它们。我更了解如何插入价值。我想知道为什么会出现这个问题。迪彭给出了一个封闭的答案。 –

1

不允许将nil值插入NSArray, NSMutableArray或任何此类数据结构。它会抛出插入的异常零值。您可以改为在其中插入[NSNull null]对象。如果是,则使用以下片段检查nil然后插入Null对象其他值。

函数在插入数据结构之前检查空值。

static id isNil(id object) 
{ 
    return object ?: [NSNull null]; 
} 

NSDictionary *question = [NSDictionary dictionaryWithObjectsAndKeys: 
           isNull(variable_first),@"first", 
           isNull(variable_second),@"second", 
           isNull(variable_third),@"third", 
           isNull(variable_fourth),@"fourth", 
           isNull(variable_fifth),@"fifth", 
            nil]; 

它将插入[NSNull null]对象,其中的任何值的是nil并继续执行。

+0

NSDictionary不会通过任何异常。所以,它是错的;然而NSArray抛出异常并崩溃。 –

+0

isNull是一个可怕的方法名称,因为它不返回参数是否为空,但是完全不同。 – gnasher729

0

这样来做: -

NSDictionary *question = [NSDictionary dictionaryWithObjectsAndKeys: 
           a?a:[NSNull null],@"first", 
           b?b:[NSNull null],@"second", 
           c?c:[NSNull null],@"third", 
           d?d:[NSNull null],@"fourth", 
           ef?ef:[NSNull null],@"fifth", 
           nil];