我正在使用一个网络服务,从各种餐厅向我返回食物菜单项。用户输入餐馆名称并点击"搜索"按钮,用户被定向到填充了菜单项的表视图。
以下是从服务中检索数据的代码(现在可能不相关,但可能会为您的人提供答案) :
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以返回营养信息?
对于冗长的格式和丰富的代码感到抱歉,但我已经在这个问题上工作了几个小时而没有成功的一瞥。
答案 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数组。