使用 NSMutableDictionary 和数组填充单元格的 TableView
Posted
技术标签:
【中文标题】使用 NSMutableDictionary 和数组填充单元格的 TableView【英文标题】:TableView with NSMutableDictionary and arrays to fill in the cells 【发布时间】:2012-02-08 06:32:21 【问题描述】:我刚开始学习 Xcode,阅读了这本书,现在尝试实现我阅读的内容。该应用程序需要将某些数据存储在数组和字典中,然后表格视图通过自动计算节数、行数和使用分配给关键字的内容填充表格单元格来提取数据。
请查看我的代码,因为我一直在尝试运行该应用程序,但它给了我 SIGABRT 错误。我不知道新的 Xcode 是否没有以这种方式声明或调用事物(我的书适用于 ios3)。我试图从博客、youtube 中找到解决方案,但该应用程序此时仍未运行。 我知道我在 AppDelegate 文件等中正确声明了所有内容,因为我使用了某人的一个 1 数组的示例代码。并且表格视图被填充了。
帮助我,因为我的 NSMutableDictionary 和 indexPath 代码有问题。谢谢!
#import "TableViewController.h"
@implementation TableViewController
@synthesize tableData;
@synthesize tableSections;
#pragma mark - View lifecycle
- (void)viewDidLoad
[self createData];
[super viewDidLoad];
-(void)createData
NSMutableArray *category1;
NSMutableArray *category2;
category1=[[NSMutableArray alloc] init];
category2=[[NSMutableArray alloc] init];
tableSections=[[NSMutableArray alloc] initWithObjects:@"Category 1", @"Category 2", nil];
tableData=[[NSMutableArray alloc] initWithObjects:category1, category2, nil];
[category1 addObject:[[NSMutableDictionary alloc]
initWithObjectsAndKeys:@"TitleA", @"name",@"A",@"property", nil]];
[category1 addObject:[[NSMutableDictionary alloc]
initWithObjectsAndKeys:@"TitleB", @"name",@"B",@"property", nil]];
[category2 addObject:[[NSMutableDictionary alloc]
initWithObjectsAndKeys:@"TitleC", @"name",@"C",@"property", nil]];
[category2 addObject:[[NSMutableDictionary alloc]
initWithObjectsAndKeys:@"TitleD", @"name",@"D",@"property", nil]];
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return [tableSections count];
//return [self.tableSections count]; Also tried to use with self. Don’t know which one is correct
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [[self.tableSections objectAtIndex:section] count];
- (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] objectAtIndex:indexPath.row] objectForKey:@"name"];
/* Also tried this:
tableData *cellObj = [[self.tableData objectAtIndex:indexPath.section]objectAtIndex:indexPath.row];
cell.textLabel.text = cellObj.name;
/* Also tried this:
tableData *cellObj= [[[self.tableData objectAtIndex:indexPath.section]objectAtIndex:indexPath.row]objectForKey:@"name"];
cell.textLabel.text=smsObj.name; */
/* Also tried this:
NSDictionary *item = (NSDictionary *)[self.tableData objectAtIndex:indexPath.row];
cell.textLabel.text = [item objectForKey:@"name"];*/
/* Also tried this way:
NSDictionary *dictionary = [tableData objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"name"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
cell.text = cellValue;
And the same way, but switched order of NSArray and NSDictionary*/
return cell;
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
// This I will add later, after I make my Table View Controller work
@end
我知道我对代码做了一些非常愚蠢的事情,但我正在尝试了解编写代码的正确方法...
【问题讨论】:
【参考方案1】:[category1 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleA", @"name",@"A",@"property", nil]]; [category1 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleB", @"name",@"B",@"property", nil]];
[category2 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleC", @"name",@"C",@"property", nil]];
[category2 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleD", @"name",@"D",@"property", nil]];
在这些数组初始化后添加此代码并尝试
【讨论】:
以上是关于使用 NSMutableDictionary 和数组填充单元格的 TableView的主要内容,如果未能解决你的问题,请参考以下文章
如何获得 NSDictionary/NSMutableDictionary 的原始顺序?
使用 NSMutableDictionary 将对象保存到数组
NSMutableDictionary 没有得到预期的输出。
使用 UIImageView 作为 NSMutableDictionary 中的键来查找布尔值
释放数组时 NSMutableDictionary 中使用的对象的内存会发生啥?
使用 NSJSONSerialization 将 NSMutableDictionary 转换为 JSON 会返回不同的结果