【问题标题】:IOS NSDictionary element to NSStringIOS NSDictionary 元素到 NSString
【发布时间】:2015-12-31 15:44:39
【问题描述】:

您好,我正在尝试从 NSDictionary 中提取键值,字典值如下图所示

我需要使用代码将键“TITLE”的值提取到 NSString

NSDictionary* tmp = [self getDBRequest:req];
NSString * title =[tmp valueForKey:@"TITLE"];

但是给出类似的值

上面的代码有什么问题吗?

编辑:

NSLog(@"%@", tmp);

给出输出

2015-12-31 11:04:52.530 SimpleTable[610:10059] (
        {
        DESCRIPTION = "30% OFF ON NEW ";
        "IMAGE_URL" = "crowd.jpg";
        TITLE = "GET 30% OFF";
    }
)

编辑2

实际上使用NSString * title =[tmp valueForKey:@"TITLE"];的结果我必须替换NSMutableArray的一个元素

还有代码

NSMutableArray *array = [[NSMutableArray alloc]init];
 [array addObject:@"Eezy"];
 [array addObject:@"Tutorials"];

 NSDictionary* tmp = [self getDBRequest:req];
 NSString * title =[tmp valueForKey:@"TITLE"];
[array replaceObjectAtIndex:0 withObject:title];

给我数组修改了一些类似下面的屏幕截图

【问题讨论】:

  • 你能告诉我们,什么 NSLog(@"%@", tmp);打印到控制台?
  • 您得到的结果与您的预期有何不同?
  • 该代码运行正常;虽然你想要objectForKey:,而不是valueForKey:
  • @trojanfoe objectForKey: 给我一个例外,比如2015-12-31 11:15:11.297 SimpleTable[649:12131] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x7fd09941a240'
  • @Haris 这没有意义;你确定它在那条线上吗?您显示的是字典,而不是数组。

标签: ios objective-c nsstring nsdictionary


【解决方案1】:

查看问题中的第一张图片,内容转储的第一行显示“1 个对象”。

同时查看NSLog 的输出,注意括号(()环绕大括号({}),依次围绕键/值对。

这两个都告诉您tmp 不是像您想象的那样引用NSDictionary,而是一个包含单个元素的NSArray,并且该元素是NSDictionary

现在,当您在字典数组上调用 valueForKey: 时,它会对集合中的每个字典进行键查找并返回结果数组。

这就是为什么当您查看问题中的第二张图片时,您会看到其内容转储也以“1 个对象”开头 - title 引用了一个包含一个元素的数组,即您的字符串。

这也是为什么,如 cmets 中所述,使用 objectForKey: 代替 valueForKey: 会导致错误 - 该方法不对数组进行操作,因此会产生 unrecognized selector sent to instance 错误。

HTH

【讨论】:

【解决方案2】:

试试下面的代码。

NSDictionary *tmp = @{@"DESCRIPTION" : @"30 OFF ON NEW",@"IMAGE_URL" : @"crowd.jpg",@"TITLE" : @"GET 30% OFF"};
//NSDictionary* tmp = [self getDBRequest:req];
NSArray *keyArray = [tmp allKeys];
NSString * title = [keyArray objectAtIndex:[keyArray indexOfObject:@"TITLE"]];//[keyArray objectAtIndex:0];
[array replaceObjectAtIndex:0 withObject:title];

【讨论】:

  • [temp allKeys] 这将返回字典 'temp' 的所有键的 NSArray,而 [temp allValues] 将返回字典的所有值
  • 这如何回答这个问题?
  • 他需要字典的“钥匙”
  • 他有钥匙 (@"TITLE")。您刚刚演示了对 NSDictionary 的随机操作。一点用都没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
相关资源
最近更新 更多