Ios 如何从数组中获取一个特定键的所有值?

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 = [_

我正在使用Objective C开发应用程序

我在服务器端的响应中得到以下数组(我使用
AFNetworking
Get
方法)

我想为键
名称
分隔值

简而言之,我希望输出如下:
[option1、option2、option3、option4、option5、option6、option7、option8、option9、option10]

为此,我尝试了以下方法:

将该响应存储在数组中(
\u arr
)。然后尝试按如下方式分离key
name
的值

   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
类型。使用循环进行迭代。我不清楚如何做