NSString和NSDictionary valueForKey - nil?

spe*_*tak 5 iphone cocoa-touch objective-c ios

如果从字典中的空键/值获取数据,如何将默认值放入字符串中.

所以 [myObject setMyString:[dictionary valueForKey:@"myKey"]];

那么如果我这样做,NSString *newString = myObject.myString我会得到一个unrecognized selector error.

所以,如果键值为空,我只需要一种方法来插入一个默认字符串;

Mat*_*man 10

如果dictionaryNSDictionary你应该使用objectForKeyvalueForKey是用于KVC.NSDictionary如果密钥与某些NSDictionaryKVC密钥冲突,例如"@allKeys"或"@count",它可能会工作,但可能会咬你.

我认为最短的可能是:

[dictionary objectForkey:@"myKey"] ?: @"defaultValue"
Run Code Online (Sandbox Code Playgroud)

有一种可怕的方法可以滥用现有的字典方法来生成get by key或者如果你因某些原因不想使用某个条件则返回默认值...

[[dictionary objectsForKeys:[NSArray arrayWithObject:@"myKey"]
             notFoundMarker:@"defaultValue"]
 objectAtIndex:0]
Run Code Online (Sandbox Code Playgroud)

你没有听到我的消息:)


Nek*_*kto 9

那这个呢?

NSString *value = [dictionary valueForKey:@"myKey"];
if (!value) value = @"defaultValue";
[myObject setMyString:value];
Run Code Online (Sandbox Code Playgroud)

  • 也可以做`[myObject setMyString:[dic ... Key:@"myKey"]?:@"defaultValue"];` (8认同)
  • 人们总是可以为NSArray创建一个类别,比如`objectForKey:(id)key withDefault:(id)defaultObject`.这将允许"单线程"操作. (5认同)

Pau*_*nch 5

使用[NSNull null]对于一般情况,并处理它返回的时候.

在你的问题中,你不会得到"无法识别的选择器"; newString将被设置为nil(相反[NSNull null],所以我怀疑你可能有其他意义 - 也许如何设置默认值NSUserDefaults