如何从JSON中的项目中检索项目ID

时间:2015-06-08 00:14:59

标签: ios objective-c json asp.net-web-api

我正在使用一个网络服务,从各种餐厅向我返回食物菜单项。用户输入餐馆名称并点击"搜索"按钮,用户被定向到填充了菜单项的表视图。

以下是从服务中检索数据的代码(现在可能不相关,但可能会为您的人提供答案) :

  NSString *userString = [userEnteredText text];
    NSString *correctedString = [userString stringByReplacingOccurrencesOfString:@" " withString:@"%20"];

    NSString *urlString = [NSString stringWithFormat:@"https://api.nutritionix.com/v1_1/search/%@?results=0%%3A20&cal_min=0&cal_max=50000&fields=item_name%%2Cbrand_name%%2Citem_id%%2Cbrand_id&appId=MY_APP_ID&appKey=MY_APP_KEY", correctedString];

    NSURL *url = [NSURL URLWithString:urlString];

    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url
                                                cachePolicy:NSURLRequestReturnCacheDataElseLoad
                                            timeoutInterval:30];

    NSData *urlData;
    NSURLResponse *response;
    NSError *error;


    urlData = [NSURLConnection sendSynchronousRequest:urlRequest
                                    returningResponse:&response
                                                error:&error];

    NSMutableDictionary *foodDataArray = [NSJSONSerialization JSONObjectWithData:urlData options:kNilOptions error:&error];

    NSMutableDictionary *items = [foodDataArray objectForKey:@"hits"];

    NSMutableArray *fields = [items valueForKey:@"fields"];

    itemNamesArray = [fields valueForKey:@"item_name"];

就像我检索" item_name"的方式一样,我可以检索" item_id"的数组。

当用户点击菜单项时,我想检索该项的ID并将其插入服务以检索该菜单项的营养成分。

我尝试了以下内容:

这是我的prepareForSegue方法,其中" MVC"是我的目标View Controller。

  theItemIDArray = [fields valueForKey:@"item_id"];
  [MVC setItemIDArray:theItemIDArray];

然后在我的MVC.m中我有这段代码:

-(void)setItemIDArray:(NSMutableArray *)b
{
theitemIDArray = b;
}

如您所见,我将itemID的数组从原始视图控制器传递到目标视图控制器。

这是我必须传递商品ID以获取该商品的营养信息的部分。

在我的目标视图控制器上的prepareForSegue中,我尝试传递数组:

NSString *urlString = [NSString stringWithFormat:@"https://api.nutritionix.com/v1_1/item?id=%@&appId=MY_APP_ID&appKey=MY_APP_KEY", theitemIDArray];

但是,这个urlString要求我传入NSString,而不是NSMutableArray。

所以我的问题是:如何检索我点击的单元格的itemID并插入该ID以返回营养信息?

对于冗长的格式和丰富的代码感到抱歉,但我已经在这个问题上工作了几个小时而没有成功的一瞥。

2 个答案:

答案 0 :(得分:0)

" item_id"应该是多个对象?或者它恰好是一个项目的数组?根据我对nutrix api的了解,我会假设这个答案是一个项目的数组。 你想要做的是获取该数组中的第一项,所以你需要通过调用[theitemIDArray firstObject]来获取它:

NSString *urlString = [NSString stringWithFormat:@"https://api.nutritionix.com/v1_1/item?id=%@&appId=MY_APP_ID&appKey=MY_APP_KEY", [theitemIDArray firstObject]];

要考虑的另一件事是将itemID存储为字符串而不是数组:

theItemIDArray = [fields valueForKey:@"item_id"];
[MVC setItemID:[theItemIDArray firstObject]];

然后你可以在调用该项目的营养api时使用该itemID

答案 1 :(得分:0)

据推测,您有类似桌子的东西供用户选择项目吗?当他们点击一行时,您需要该行的项目ID吗?

您已将项目名称存储在行中,或者在行配置方法中访问该名称。您应该能够以相同的方式找到行的项ID。将它存储在行中或使用Ross的indexPath.row索引到itemID数组。