菜鸟教程小白 发表于 2022-12-12 09:01:20

ios - 使用 Objective-C 到 UITableView 的 JSON 数据


                                            <p><p><strong>-- 主 JSON 文件的更新问题 --</strong></p>

<p>我正在尝试将名称添加到表格 View 中。但 table 总是空的。 (Xcode 7.1b1,iOS 9.1b2)
这只是我正在测试我的代码的示例 .json 文件。主 json 文件有更多的数据。 </p>

<p>我成功地添加了示例 json 文件中的数据。但是现在使用主json文件后,表又是空的了。</p>

<p><strong>.json 文件</strong></p>

<pre><code>[
{
    &#34;150978&#34;: {
      &#34;jobs&#34;: {
      &#34;D0-C14008-CW&#34;: {
          &#34;05-9032&#34;: {
            &#34;G-05&#34;: {
            &#34;hours_rwk&#34;: &#34;False&#34;,
            &#34;hours_st&#34;: &#34;4L&#34;,
            &#34;hours_ewo_id&#34;: &#34;D0-C14008-CWddda&#34;,
            &#34;hours_ewo&#34;: &#34;True&#34;,
            &#34;hours_dt&#34;: &#34;0L&#34;,
            &#34;hours_ot&#34;: &#34;0L&#34;,
            &#34;comments&#34;: &#34;&#34;
            }
          },
          &#34;05-9031&#34;: {
            &#34;B-02&#34;: {
            &#34;hours_rwk&#34;: &#34;False&#34;,
            &#34;hours_st&#34;: &#34;4L&#34;,
            &#34;hours_ewo_id&#34;: &#34;&#34;,
            &#34;hours_ewo&#34;: &#34;False&#34;,
            &#34;hours_dt&#34;: &#34;0L&#34;,
            &#34;hours_ot&#34;: &#34;0L&#34;,
            &#34;comments&#34;: &#34;&#34;
            }
          }
      }
      },
      &#34;name&#34;: &#34;CirilloBetancourt&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Carpenter&#34;,
      &#34;note&#34;: &#34;&#34;,
      &#34;signed_in&#34;: &#34;True&#34;,
      &#34;time_in&#34;: &#34;08: 30&#34;,
      &#34;time_out&#34;: &#34;16: 30&#34;,
      &#34;signed_out&#34;: &#34;True&#34;
    },
    &#34;151243&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;JasonDiaz&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Carpenter&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;151248&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;AngelTorresMadrigal&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Carpenter&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;151336&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;DanielFrey&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Carpenter&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;151419&#34;: {
      &#34;jobs&#34;: {
      &#34;D0-C14009-CW1&#34;: {
          &#34;05-9033&#34;: {
            &#34;G-07&#34;: {
            &#34;hours_rwk&#34;: &#34;False&#34;,
            &#34;hours_st&#34;: &#34;8L&#34;,
            &#34;hours_ewo_id&#34;: &#34;0&#34;,
            &#34;hours_ewo&#34;: &#34;False&#34;,
            &#34;hours_dt&#34;: &#34;0L&#34;,
            &#34;hours_ot&#34;: &#34;0L&#34;,
            &#34;comments&#34;: &#34;&#34;
            }
          }
      },
      &#34;D0-C14008-CW&#34;: {
          &#34;05-9031&#34;: {
            &#34;B-02&#34;: {
            &#34;hours_rwk&#34;: &#34;False&#34;,
            &#34;hours_st&#34;: &#34;0L&#34;,
            &#34;hours_ewo_id&#34;: &#34;0&#34;,
            &#34;hours_ewo&#34;: &#34;True&#34;,
            &#34;hours_dt&#34;: &#34;0L&#34;,
            &#34;hours_ot&#34;: &#34;2L&#34;,
            &#34;comments&#34;: &#34;&#34;
            }
          }
      }
      },
      &#34;name&#34;: &#34;MikeGullan&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Carpenter&#34;,
      &#34;note&#34;: &#34;&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9990666&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;MattStaricha&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Carpenter&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9992610&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;MatthewBigelow&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Carpenter&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9992778&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;ZhouTan&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Carpenter&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9993273&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;RandyFarinelli&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Carpenter&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9996467&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;AlvaroSandoval(Guardado)&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Mason&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9996763&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;JesusZarate&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Mason&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9996767&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;JorgeRomero&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Mason&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9996768&#34;: {
      &#34;jobs&#34;: {
      &#34;D0-C14008-CW&#34;: {
          &#34;05-9032&#34;: {
            &#34;G-05&#34;: {
            &#34;hours_rwk&#34;: &#34;False&#34;,
            &#34;hours_st&#34;: &#34;3L&#34;,
            &#34;hours_ewo_id&#34;: &#34;0&#34;,
            &#34;hours_ewo&#34;: &#34;False&#34;,
            &#34;hours_dt&#34;: &#34;0L&#34;,
            &#34;hours_ot&#34;: &#34;0L&#34;,
            &#34;comments&#34;: &#34;&#34;
            }
          },
          &#34;05-9031&#34;: {
            &#34;B-02&#34;: {
            &#34;hours_rwk&#34;: &#34;False&#34;,
            &#34;hours_st&#34;: &#34;5L&#34;,
            &#34;hours_ewo_id&#34;: &#34;0&#34;,
            &#34;hours_ewo&#34;: &#34;False&#34;,
            &#34;hours_dt&#34;: &#34;0L&#34;,
            &#34;hours_ot&#34;: &#34;0L&#34;,
            &#34;comments&#34;: &#34;&#34;
            }
          }
      }
      },
      &#34;name&#34;: &#34;VictorRuiz&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Mason&#34;,
      &#34;note&#34;: &#34;&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9996771&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;GabinoMata-Neri&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Mason&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9999247&#34;: {
      &#34;jobs&#34;: {
      &#34;D0-C14008-CW&#34;: {
          &#34;05-9032&#34;: {
            &#34;G-05&#34;: {
            &#34;hours_rwk&#34;: &#34;False&#34;,
            &#34;hours_st&#34;: &#34;8L&#34;,
            &#34;hours_ewo_id&#34;: &#34;0&#34;,
            &#34;hours_ewo&#34;: &#34;False&#34;,
            &#34;hours_dt&#34;: &#34;0L&#34;,
            &#34;hours_ot&#34;: &#34;0L&#34;,
            &#34;comments&#34;: &#34;&#34;
            }
          },
          &#34;05-9031&#34;: {
            &#34;B-02&#34;: {
            &#34;hours_rwk&#34;: &#34;True&#34;,
            &#34;hours_st&#34;: &#34;0L&#34;,
            &#34;hours_ewo_id&#34;: &#34;0&#34;,
            &#34;hours_ewo&#34;: &#34;False&#34;,
            &#34;hours_dt&#34;: &#34;0L&#34;,
            &#34;hours_ot&#34;: &#34;1L&#34;,
            &#34;comments&#34;: &#34;&#34;
            }
          }
      }
      },
      &#34;name&#34;: &#34;FranciscoMontez&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Mason&#34;,
      &#34;note&#34;: &#34;&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    },
    &#34;9999314&#34;: {
      &#34;jobs&#34;: {},
      &#34;name&#34;: &#34;RomanHernandez&#34;,
      &#34;site_id&#34;: &#34;D0-C14008-CW&#34;,
      &#34;trade&#34;: &#34;Mason&#34;,
      &#34;note&#34;: &#34;nowork&#34;,
      &#34;signed_in&#34;: &#34;False&#34;,
      &#34;time_in&#34;: &#34;06: 00&#34;,
      &#34;time_out&#34;: &#34;06: 00&#34;,
      &#34;signed_out&#34;: &#34;False&#34;
    }
}
]
</code></pre>

<p><strong>.h 文件</strong></p>

<pre><code>#import &lt;UIKit/UIKit.h&gt;

@interface TableViewController : UITableViewController

@property (nonatomic, strong) NSArray *nameArray;
@property (nonatomic, strong) NSArray *dict;
@property (nonatomic, strong) NSData *data;
@property (nonatomic, strong) NSString *filePath;

@end
</code></pre>

<p><strong>.m 文件</strong></p>

<pre><code>#import &#34;TableViewController.h&#34;
#import &#34;TableViewCell.h&#34;

@interface TableViewController ()

@end

@implementation TableViewController

- (void)viewDidLoad {
    ;

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;

    NSError *error = nil;

    _filePath = [ pathForResource:@&#34;data&#34; ofType:@&#34;json&#34;];
    _data = ;
    _dict = ;

}

- (void)didReceiveMemoryWarning {
    ;
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
//#warning Incomplete implementation, return the number of sections
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//#warning Incomplete implementation, return the number of rows
    return _dict.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TableViewCell *cell = ;

    // Configure the cell...
    NSDictionary *dict = _dict;
NSString *name = dict[@&#34;name&#34;];
cell.titleLabel.text = name;

    return cell;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的 JSON 实际上格式错误。应该是:</p>

<pre><code>[
    {
      &#34;name&#34;: &#34;XYZ&#34;,
      &#34;details&#34;: &#34;XYZ&#34;
    },
    {
      &#34;name&#34;: &#34;XYZ&#34;,
      &#34;details&#34;: &#34;XYZ&#34;
    }
]
</code></pre>

<p>当您执行 <code>_dict = ;</code> 时,您实际得到的是字典数组,<em>不是</em>单个字典。所以调用 <code>_nameArray = ;</code> 实际上应该返回 <code>nil</code> 或崩溃。</p>

<p>你的实现应该是这样的:</p>

<pre><code>#import &#34;TableViewController.h&#34;
#import &#34;TableViewCell.h&#34;

@interface TableViewController ()

@end

@implementation TableViewController

- (void)viewDidLoad {
    ;
    NSError *error = nil;
    _filePath = [ pathForResource:@&#34;data&#34; ofType:@&#34;json&#34;];
    _data = ;
    // Remember here, __dict is an array, I kept the same name as your code but it is NOT a dictionary.
    _dict = ;
    _nameArray = ;
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return _dict.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TableViewCell *cell = ;
    // Remember here, __dict is an array, I kept the same name as your code but it is NOT a dictionary.
    NSDictionary *dict = _dict;
    NSString *name = dict[@&#34;name&#34;];
    cell.titleLabel.text = name;
    return cell;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 Objective-C 到 UITableView 的 JSON 数据,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32693193/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32693193/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 Objective-C 到 UITableView 的 JSON 数据