为啥在我滚动显示来自 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 的滚动视图的单元格中