• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 使用 indexpath.row 引用从 JSON 对象数组中获取对象

[复制链接]
菜鸟教程小白 发表于 2022-12-12 17:00:29 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

尊敬的 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap