Ios 如何从数组中获取一个特定键的所有值?
我正在使用Objective C开发应用程序 我在服务器端的响应中得到以下数组(我使用Ios 如何从数组中获取一个特定键的所有值?,ios,objective-c,arrays,Ios,Objective C,Arrays,我正在使用Objective C开发应用程序 我在服务器端的响应中得到以下数组(我使用AFNetworking的Get方法) 我想为键名称分隔值 简而言之,我希望输出如下:[option1、option2、option3、option4、option5、option6、option7、option8、option9、option10] 为此,我尝试了以下方法: 将该响应存储在数组中(\u arr)。然后尝试按如下方式分离keyname的值 NSArray *optionArray = [_
AFNetworking
的Get
方法)
我想为键名称
分隔值
简而言之,我希望输出如下:[option1、option2、option3、option4、option5、option6、option7、option8、option9、option10]
为此,我尝试了以下方法:
将该响应存储在数组中(\u arr
)。然后尝试按如下方式分离keyname
的值
NSArray *optionArray = [_arr valueForKey:@"name"];
NSLog(@"%@",optionArray);
但不幸的是,这是行不通的。应用程序崩溃并提供以下日志
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFString 0x7abd0600> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.'
*** First throw call stack:
(
0 CoreFoundation 0x00ae2a14 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x005a3e02 objc_exception_throw + 50
2 CoreFoundation 0x00ae2631 -[NSException raise] + 17
3 Foundation 0x00239098 -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 282
4 Foundation 0x0017a798 _NSGetUsingKeyValueGetter + 105
5 Foundation 0x0017a727 -[NSObject(NSKeyValueCoding) valueForKey:] + 288
6 Foundation 0x001bac40 -[NSFunctionExpression expressionValueWithObject:context:] + 1079
7 Foundation 0x001ba739 -[NSComparisonPredicate evaluateWithObject:substitutionVariables:] + 290
8 Foundation 0x001ba60f -[NSPredicate evaluateWithObject:] + 48
9 Foundation 0x001ba593 _filterObjectsUsingPredicate + 437
10 Foundation 0x001ba360 -[NSArray(NSPredicateSupport) filteredArrayUsingPredicate:] + 314
11 Wellness_24x7 0x0008fbc4 __31-[ForthViewController Donating]_block_invoke + 564
12 Wellness_24x7 0x0006c097 __116-[AFHTTPSessionManager dataTaskWithHTTPMethod:URLString:parameters:uploadProgress:downloadProgress:success:failure:]_block_invoke97 + 231
13 Wellness_24x7 0x00080bd5 __72-[AFURLSessionManagerTaskDelegate URLSession:task:didCompleteWithError:]_block_invoke_2132 + 213
14 libdispatch.dylib 0x0330e377 _dispatch_call_block_and_release + 15
15 libdispatch.dylib 0x033319cd _dispatch_client_callout + 14
16 libdispatch.dylib 0x03316f90 _dispatch_main_queue_callback_4CF + 910
17 CoreFoundation 0x00a33fde __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 14
18 CoreFoundation 0x009f1cd4 __CFRunLoopRun + 2356
19 CoreFoundation 0x009f10e6 CFRunLoopRunSpecific + 470
20 CoreFoundation 0x009f0efb CFRunLoopRunInMode + 123
21 GraphicsServices 0x050c8664 GSEventRunModal + 192
22 GraphicsServices 0x050c84a1 GSEventRun + 104
23 UIKit 0x012ecbfa UIApplicationMain + 160
24 Wellness_24x7 0x0006905a main + 138
25 libdyld.dylib 0x0335ba21 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:此类不符合密钥名称的键值编码。”
***第一次抛出调用堆栈:
(
0 CoreFoundation 0x00ae2a14例外预处理+180
1 libobjc.A.dylib 0x005a3e02 objc_异常_抛出+50
2 CoreFoundation 0x00ae2631-[N异常上升]+17
3基金会0x0249098[NSbOuts](NSKEY ValueCudid)ValueFunDealdKEY::+ 282
4基金会0x017A798,NoGestUsKiValueGeTeter + 105
5基金会0x017A727——[ NSObjor(NKKEY ValueCudid)ValueFoKe::] + 288
6基金会0x1001BAC40- [ NSCONTRONTRONEXPRESS VALUE VALIVE Objult:语境:] + 1079
7基金会0x01BA739—[ NSISTIMEONE谓词评价对象:置换变量:] + 290
8基金会0x1001BA60F- [ NSPReDATE评价对象:] + 48
9基金会0x01BA593-过滤对象SputixEclipse + 437
10基金会0x01BA360-[ NSARTRAP(NSPReDeCATESUpPATH)过滤文件ADRayAuthEngutial:+ ] 314
11身心健康\u 24x7 0x0008fbc4 \u 31-[ForthViewController捐赠]\u区块\u调用+564
12 Wellness_24x7 0x0006c097__116-[AFHTTPSessionManager dataTaskWithHTTPMethod:URLString:参数:上传进度:下载进度:成功:失败:][u block_invoke97+231
13身心健康\u 24x7 0x00080bd5 \u 72-[AFURLSessionManagerTaskDelegate URLSession:task:didCompleteWithError:\u block\u invoke\u 2132+213
14 libdispatch.dylib 0x0330e377 _dispatch_call_block_和_release+15
15 libdispatch.dylib 0x033319cd_dispatch_client_callout+14
16 libdispatch.dylib 0x03316f90_dispatch_main_queue_callback_4CF+910
17 CoreFoundation 0x00a33fde\uuuu CFRUNLOOP\u正在为\u主\u调度\u队列\uuuuuu+14提供服务
18 CoreFoundation 0x009f1cd4\uuu CFRunLoopRun+2356
19 CoreFoundation 0x009f10e6 CFRunLoopRunSpecific+470
20 CoreFoundation 0x009f0efb CFRUNLOOPSRUNINMODE+123
21图形服务0x050c8664 GSEventRunModal+192
22图形服务0x050c84a1 GSEventRun+104
23 UIKit 0x012ecbfa UIApplicationMain+160
24小时健康_24x7 0x0006905a干管+138
25 libdyld.dylib 0x0335ba21启动+1
)
libc++abi.dylib:以NSException类型的未捕获异常终止
提前谢谢。试试这个
NSMutableArray *arrOptions = [NSMutableArray new];
for (int i=0; i<_arr.count; i++) {
[arrOptions addObject:[[_arr objectAtIndex:i] objectForKey:@"name"]];
}
NSMutableArray*aroptions=[NSMutableArray new];
对于(inti=0;i试试这个
NSMutableArray *arrOptions = [NSMutableArray new];
for (int i=0; i<_arr.count; i++) {
[arrOptions addObject:[[_arr objectAtIndex:i] objectForKey:@"name"]];
}
NSMutableArray*aroptions=[NSMutableArray new];
对于(int i=0;i我可以看到您得到的是JSON格式的响应。因此,您可以将JSON转换为可变容器,如字典和数组。在您的示例中,它是字典数组
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];
if(!jsonArray)
{
for(NSDictionary *dict in jsonArray)
{
NSLog(@"%@", dict valueForKey: @"name");
}
}
我可以看到您得到的是JSON格式的响应。因此,您可以将JSON转换为可变容器,如字典和数组。在您的例子中,它是字典数组
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];
if(!jsonArray)
{
for(NSDictionary *dict in jsonArray)
{
NSLog(@"%@", dict valueForKey: @"name");
}
}
根据下面的JSON数据,您需要使用NSDictionary
而不是数组来存储数据
[{
"name": "option1",
"profile_id": 0,
"profile_name": "option1"
}, {
"name": "option2",
"profile_id": 0,
"profile_name": "option2"
}, {
"name": "option3",
"profile_id": 0,
"profile_name": "option3"
}, {
"name": "option4",
"profile_id": 0,
"profile_name": "option4"
}, {
"name": "option5",
"profile_id": 0,
"profile_name": "option5"
}, {
"name": "option6",
"profile_id": 0,
"profile_name": "option6"
}, {
"name": "option7",
"profile_id": 0,
"profile_name": "option7"
}, {
"name": "option8",
"profile_id": 0,
"profile_name": "option8"
}, {
"name": "option9",
"profile_id": 0,
"profile_name": "option9"
}, {
"name": "option10",
"profile_id": 0,
"profile_name": "option10"
}]
使用dict获取数据,如:
NSDictionary *jsonDataDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSArray *optionArray = [jsonDataDict valueForKey:@"name"];
问题:您试图获取name
键的数据,并将整个JSON
数据存储在数组中。
数组不包含键值对使用NSDictionary
根据下面的JSON数据,您需要使用NSDictionary
而不是数组来存储数据
[{
"name": "option1",
"profile_id": 0,
"profile_name": "option1"
}, {
"name": "option2",
"profile_id": 0,
"profile_name": "option2"
}, {
"name": "option3",
"profile_id": 0,
"profile_name": "option3"
}, {
"name": "option4",
"profile_id": 0,
"profile_name": "option4"
}, {
"name": "option5",
"profile_id": 0,
"profile_name": "option5"
}, {
"name": "option6",
"profile_id": 0,
"profile_name": "option6"
}, {
"name": "option7",
"profile_id": 0,
"profile_name": "option7"
}, {
"name": "option8",
"profile_id": 0,
"profile_name": "option8"
}, {
"name": "option9",
"profile_id": 0,
"profile_name": "option9"
}, {
"name": "option10",
"profile_id": 0,
"profile_name": "option10"
}]
使用dict获取数据,如:
NSDictionary *jsonDataDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSArray *optionArray = [jsonDataDict valueForKey:@"name"];
问题:您试图获取name
键的数据,并将整个JSON
数据存储在数组中。
数组不包含键值对使用NSDictionary
实际上,JSON响应是从数组开始的,所以
NSArray *ResponseArray = [NSJSONSerialization JSONObjectWithData: data options: KNilOptions error: nil];
NSMutableArray *finalArray = [NSMutableArray array];
for (NSDictionary *temp in ResponseArray) {
[finalArray addObject:temp[@"name"]];
}
AFN网络选择-2
NSMutableArray *finalArray = [NSMutableArray array];
for (NSDictionary *temp in responseObject) {
[finalArray addObject:temp[@"name"]];
}
实际上,JSON响应是从数组开始的,所以
NSArray *ResponseArray = [NSJSONSerialization JSONObjectWithData: data options: KNilOptions error: nil];
NSMutableArray *finalArray = [NSMutableArray array];
for (NSDictionary *temp in ResponseArray) {
[finalArray addObject:temp[@"name"]];
}
AFN网络选择-2
NSMutableArray *finalArray = [NSMutableArray array];
for (NSDictionary *temp in responseObject) {
[finalArray addObject:temp[@"name"]];
}
你想要实现的目标和你的想法我可以说你走上了正确的轨道。
您已在NSDictionary中转换了响应数据,但它必须是数组
NSArray *responseArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
这将把您的响应转换为数组,您可以使用
NSArray *optionArray = [responseArray valueForKey:@"name"];
这将导致与@Krishna Kumar的答案相同的结果,但有了这一点,你将能够避免“for”循环。你想要实现的目标和你的想法,我可以说你在正确的轨道上。
您已在NSDictionary中转换了响应数据,但它必须是数组
NSArray *responseArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
这将把您的响应转换为数组,您可以使用
NSArray *optionArray = [responseArray valueForKey:@"name"];
这将导致与@Krishna Kumar的答案相同的结果,但通过这一点,你将能够避免“for”循环。你能展示一些额外的代码吗?我认为,optionArray
的每个元素都是nsdictionary
类型。使用循环进行迭代。我不清楚如何做