为啥在我滚动显示来自 plist 的数据的 tableview 后我的应用程序崩溃?

Posted

技术标签:

【中文标题】为啥在我滚动显示来自 plist 的数据的 tableview 后我的应用程序崩溃?【英文标题】:Why does my app crash after i scroll a tableview displaying data from plist?为什么在我滚动显示来自 plist 的数据的 tableview 后我的应用程序崩溃? 【发布时间】:2012-06-13 16:01:11 【问题描述】:

我像这样将数据加载到 tableview:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    return [tableData count];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    return [[[tableData objectAtIndex: section] objectForKey: @"Rows"] count];


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
    return [[tableData objectAtIndex: section] objectForKey: @"Title"];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    

    cell.textLabel.text = [[[tableData objectAtIndex: indexPath.section] objectForKey: @"Rows"] objectAtIndex: indexPath.row];

    return cell;

我的 viewDidLoad

- (void)viewDidLoad 
    [super viewDidLoad];

    self.tableData = [NSArray arrayWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"data" ofType: @"plist"]];

我使用 ARC 模式

编辑

我的列表:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>Title</key>
        <string>Section1</string>
        <key>Rows</key>
        <array>
            <string>Section1 Item1</string>
            <string>Section1 Item2</string>
        </array>
    </dict>
    <dict>
        <key>Title</key>
        <string>Section2</string>
        <key>Rows</key>
        <array>
            <string>Section2 Item1</string>
            <string>Section2 Item2</string>
        </array>
    </dict>
</array>
</plist>

【问题讨论】:

应用崩溃时控制台显示的错误是什么? 输出窗口中的内容是什么? 我将我的 plist 结构添加到问题中 如果它已经崩溃,应该不仅仅是(lldb),这是调试器的提示 进入断点导航器(cmd-6),点击左下角的加号,添加异常断点...,所有异常。这目前可能适用,也可能不适用,但非常有用。 【参考方案1】:

首先在您的didLoad 中执行此操作:

NSString *dataStr = [NSDictionary dictionaryWithContentsOfFile: [[NSBundle mainBundle]
                                               pathForResource: @"data" ofType: @"plist"]];

将其添加到 NSDictionary:

NSDictionary *dataDict = [[NSDictionary alloc] initWithContentsOfFile:dataStr];

将字典添加到 NSArray:

NSArray *dataArray = [dataDict allKeys]

终于进入:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

通过执行以下操作填充您的表格:

 NSString *data = [dataArray objectAtIndex:[indexPath row]];
 [[cell textLabel] setText:data];

【讨论】:

【参考方案2】:

做这个tableData是NSDictionary:

 - (void)viewDidLoad 
  [super viewDidLoad];

  self.tableData = [NSDictionary dictionaryWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"data" ofType: @"plist"]];

使用 tableData 在 tableView 中提供值并相应地更改 tableViewDelegate 和数据源

【讨论】:

tableData 作为 tableView 的字典并相应地更改 tableViewDelegate 和数据源 "相应地改变 tableViewDelegate 和数据源" 用什么改变?抱歉,我是新手。

以上是关于为啥在我滚动显示来自 plist 的数据的 tableview 后我的应用程序崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的视频没有显示在我使用 AVPlayer 的滚动视图的单元格中

为啥我的 tableView 不向下滚动就不会更新?

为啥直到在选项卡之间滚动才会显示 recyclerview 项目?

来自 Plist 的 UIImageView

使材质选项卡可滚动

在另一个视图的标签中传递来自 TableView 的 plist 数据