OStack程序员社区-中国程序员成长平台

标题: ios - 使用 indexpath.row 引用从 JSON 对象数组中获取对象 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 17:00
标题: ios - 使用 indexpath.row 引用从 JSON 对象数组中获取对象

尊敬的 StackOverflow 用户,

第一次发帖,我会尽力而为!

我有一个简单的 JSON 文件,看起来像这样(我不会包含所有文件,因为它太长了):

{
"guidelines": [
{
  "title": "Editorial - Doporučené postupy",
  "guidelinepath": "1 - Editorial"
},
{
  "title": "reambule",
  "guidelinepath": "1 - Preambule"
},
{
  "title": "Zásady dispenzární péče ve fyziologickém těhotenství",
  "guidelinepath": "1- Z"
},
{
  "title": "rovádění screeningu poruch glukózové tolerance v graviditě",
  "guidelinepath": "2"
}]
}

使用这些数据,我设法填充了一个 tableView(即,在命令行输出中正确解析的 JSON),为我欢呼。现在我想做的是检测已被点击的 tableView 单元格并直接指向与该标题相关的 guidelinepath JSON 对象(这将导致一个文本文件将填充一个 TextView )。我试过了许多不同的解决方案,但它们都导致(null)。

以下是我设法完成且没有错误的不完整代码。

- (void)prepareForSegueUIStoryboardSegue *)segue senderid)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)prepareForSegueUIStoryboardSegue *)segue senderid)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;
    }
}



Best Answer-推荐答案


从您的 json 看来, [dataDictionary objectForKey"guidelines"];返回一个 NSArray。所以访问正确的项目只需使用:

NSDictionary *item = [self.guidelines objectAtIndex:indexPath.row];
NSString     *path = [item objectForKey"guidelinepath"];

关于ios - 使用 indexpath.row 引用从 JSON 对象数组中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20372470/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4