我现在已经得到了我的问题的答案,我不知道它是否是正确的方法,但它正在工作并欢迎评论。
只是为了澄清问题是什么,以及我想要做什么。
我有一个核心数据实体company
,其中包含大约 10 个左右的字段,但是我不想一次性列出它们,而是想对输出的字段进行分组。
例如,我有大约 6 个与现金相关的字段,例如“cash”、“marketingBudget”、“seoBudget”等,我想在 tableView 上对这些数据进行分组,但问题是我不知道如何设置一个关系,以便 table.field.x 属于 group.x,依此类推。
我得到的答案是使用一个 PLIST/字典,它几乎反映了核心数据实体的结构;并将结构分配给我要显示的组。
我的字典是这样的;
(根)
->CompanyTpl(数组)
--> 项目 0(字典)
---> 部分(字符串)=“常规”
---> 子项(数组) ------> 第 0 项(字典)
---------->键=“名称”
----------> 值 = "公司名称" ...
如果需要,这Key
将是 Core Data 使用和显示其内容的参考。
Value
将显示在 cellForRowAtIndexPath 的位置。
因此,在我的代码中,我基本上浏览了该部分(我的意思是 tableView 部分),然后从 PLIST 中找到相关的子信息;并获取键/值并在需要时使用它。
这是代码的精简版本。
- (void)viewDidLoad {
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"CompanyTpl" ofType:@"plist"];
self.companyDictionary = [[NSDictionary dictionaryWithContentsOfFile:plistPath] retain];
// self.tableDataSource is a NSMutableArray
self.tableDataSource = [self.companyDictionary objectForKey:@"CompanyTpl"];
// Debugging info
NSLog(@"Section = 0");
NSLog(@"%@", [self.tableDataSource objectAtIndex:0]);
NSLog(@"Section Name = %@", [[self.tableDataSource objectAtIndex:0] objectForKey:@"Section"]);
NSArray *sectionChildren = [[self.tableDataSource objectAtIndex:0] objectForKey:@"Data"];
NSLog(@"Section Children = %@", sectionChildren);
NSLog(@"Count of Section Children = %d", [sectionChildren count]);
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return ([self.tableDataSource count]);
}
// Section header
-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSString *title = nil;
title = [[self.tableDataSource objectAtIndex:section] objectForKey:@"Section"];
return title;
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSInteger rows = 0;
NSArray *sectionChildren = [[self.tableDataSource objectAtIndex:section] objectForKey:@"Data"];
NSLog(@"Section Children = %@", sectionChildren);
NSLog(@"Count of Section Children = %d", [sectionChildren count]);
rows = [sectionChildren count];
return rows;
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSArray *sectionChildren = [[self.tableDataSource objectAtIndex:indexPath.section] objectForKey:@"Data"];
NSDictionary *sectionChildrenData = [sectionChildren objectAtIndex:indexPath.row];
//NSLog(@"Section Children data = %@", sectionChildrenData);
NSString *scKey = [sectionChildrenData objectForKey:@"Key"];
NSString *scValue = [sectionChildrenData objectForKey:@"Value"];
NSLog(@"scKey = %@", scKey);
// Grab the data from Core Data using the scKey
static NSString *CellIdentifier = @"defaultCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
//cell.textLabel.text = @"test";
cell.textLabel.text = scValue;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
return cell;
}
这个想法是我可以在引用 Core Data 时使用 KEY 来获取其内容并将其显示在 tableView 控制器上的 cellForRowAtIndexPath cell.textLabel.text 值处。
可以更深入一点,并在 PLIST 中获得更多信息,例如字幕应该是什么等。
无论如何,欢迎评论和想法。
谢谢。