使用 indexpath.row 引用从 JSON 对象数组中获取对象
Posted
技术标签:
【中文标题】使用 indexpath.row 引用从 JSON 对象数组中获取对象【英文标题】:Using indexpath.row to refer to get an object from an array of JSON objects 【发布时间】:2013-12-04 10:12:41 【问题描述】:尊敬的 *** 用户,
第一次发帖,我会尽力而为!
我有一个简单的 JSON 文件,看起来像这样(我不会包含所有文件,因为它太长了):
"guidelines": [
"title": "Editorial - Doporučené postupy",
"guidelinepath": "1 - Editorial"
,
"title": "Preambule",
"guidelinepath": "1 - Preambule"
,
"title": "Zásady dispenzární péče ve fyziologickém těhotenství",
"guidelinepath": "1- Z"
,
"title": "Provádění screeningu poruch glukózové tolerance v graviditě",
"guidelinepath": "2"
]
有了这些数据,我设法填充了一个 tableView(即,在命令行输出中正确解析的 JSON),为我欢呼。现在我想做的是检测已被点击的 tableView 单元格并指向与该标题相关的 guidelinepath JSON 对象(这将导致一个文本文件将填充一个文本视图)。我试过了许多不同的解决方案,但它们都导致了 (null)。
以下是我设法完成且没有错误的不完整代码。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"showGuideline"])
NSLog(@"seguehasbeenselected");
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSLog(@"%@ is the indexpath", indexPath);
我已尝试彻底研究该问题,并尝试通过以下答案帮助自己: Using indexPath.row to get an object from an array
getting json object and then assign to uitable view
但他们无法以某种方式真正回答我的问题。任何帮助将不胜感激!
如果想了解更多关于 JSON 是如何解析的信息,下面是代码:
[super viewDidLoad];
NSString *jsonFilePath = [[NSBundle mainBundle] pathForResource:@"postupy" ofType:@"json"];
NSData *jsonData = [NSData dataWithContentsOfFile:jsonFilePath];
NSError *error = nil;
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
NSLog(@"%@",dataDictionary);
self.guidelines = [dataDictionary objectForKey:@"guidelines"];
self.guidelineFiles = [dataDictionary objectForKey:@"guidelinepath"];
指南文件和指南的声明:
#import <UIKit/UIKit.h>
@interface PostupyTableViewController : UITableViewController
@property (nonatomic, strong) NSArray *guidelines;
@property (nonatomic, strong) NSArray *guidelineFiles;
@end
-- 最终解决方案--
我按如下方式编辑了 prepareForSegue 方法,现在它可以完美运行:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"showGuideline"])
NSLog(@"seguehasbeenselected");
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSLog(@"%@ is the indexpath", indexPath);
NSDictionary *item = [self.guidelines objectAtIndex:indexPath.row];
NSString * path = [item objectForKey :@"guidelinepath"];
NSLog(@"%@ is the path",path);
PostupyDetailViewController *pdwc = (PostupyDetailViewController *)segue.destinationViewController;
pdwc.guidelineChosen = path;
【问题讨论】:
+1 以获得漂亮的格式。欢迎来到 SO 非常感谢 :)!期待解决这一挑战:) 显示您的guidelineFiles声明。 @stefbmt 'didSelectRowAtIndexPath' 将在 'prepareForSegue' 之后被调用。这就是索引路径为空的原因。 【参考方案1】:从您的 json 看来,[dataDictionary objectForKey:@"guidelines"]
;返回一个 NSArray。所以访问正确的项目只需使用:
NSDictionary *item = [self.guidelines objectAtIndex:indexPath.row];
NSString *path = [item objectForKey:@"guidelinepath"];
【讨论】:
嗨垫,非常感谢您的帮助。我尝试 NSLog "path" ,但它似乎没有输出任何东西。即最后输出的日志是“..是索引路径” 不客气,请记住,Json 数组包含在 "[ ]" 和字典(键值元素)之间的 " " 之间。 添加了你的两行并将路径实例传输到 DetailViewController 但没有设法让它工作:NSDictionary *item = [self.guidelineFiles objectAtIndex:indexPath.row]; NSString * path = [item objectForKey :@"guidelinepath"]; NSLog(@"%@ is the path",path); PostupyDetailViewController *pdwc = (PostupyDetailViewController *)segue.destinationViewController; pdwc.guidelineChosen = path;
嗨@Mat!刚刚意识到编写了指南文件而不是指南,现在它就像一个魅力!谢谢谢谢谢谢!以上是关于使用 indexpath.row 引用从 JSON 对象数组中获取对象的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4.2 - 如何从 tableView 中的“didSelectRowAtIndexPath”方法调用“indexPath.row”到另一个类?
如何从扩展的 collectionview 到达 tableview 的 indexpath.row?
从 TableView Objective C 中获取 IndexPath.Row [重复]
在 prepareForSegue 中访问 CollectionView indexPath.row