IOS NSDictionary 元素到 NSString
IOS NSDictionary element to NSString
您好,我正在尝试从 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];
给我数组修改了一些东西,如下图所示
试试下面的代码。
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];
查看问题中的第一张图片,内容转储的第一行显示“1 个对象”。
同时查看 NSLog
的输出,注意圆括号 ((
& )
) 包围 大括号 ({
& }
),它们依次包围 key/value 对。
这两个都告诉你 tmp
不是你想的那样引用 NSDictionary
,而是包含单个元素的 NSArray
并且该元素是 NSDictionary
.
现在,当您对字典数组调用 valueForKey:
时,它会对集合中的每个字典以及 returns 和结果数组进行键查找。
这就是为什么当您查看问题中的第二张图片时,您会发现其内容转储也以“1 个对象”开头 - title
引用的数组包含一个元素,即您的字符串。
这也是为什么,如评论中所述,使用 objectForKey:
代替 valueForKey:
会导致错误 - 该方法不对数组进行操作,因此会产生 unrecognized selector sent to instance
错误。
HTH
您好,我正在尝试从 NSDictionary 中提取键值,字典值如下图所示
我需要使用代码
将键 "TITLE" 的值提取到 NSStringNSDictionary* 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];
给我数组修改了一些东西,如下图所示
试试下面的代码。
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];
查看问题中的第一张图片,内容转储的第一行显示“1 个对象”。
同时查看 NSLog
的输出,注意圆括号 ((
& )
) 包围 大括号 ({
& }
),它们依次包围 key/value 对。
这两个都告诉你 tmp
不是你想的那样引用 NSDictionary
,而是包含单个元素的 NSArray
并且该元素是 NSDictionary
.
现在,当您对字典数组调用 valueForKey:
时,它会对集合中的每个字典以及 returns 和结果数组进行键查找。
这就是为什么当您查看问题中的第二张图片时,您会发现其内容转储也以“1 个对象”开头 - title
引用的数组包含一个元素,即您的字符串。
这也是为什么,如评论中所述,使用 objectForKey:
代替 valueForKey:
会导致错误 - 该方法不对数组进行操作,因此会产生 unrecognized selector sent to instance
错误。
HTH