私は今、私の問題に対する答えを持っています。それが正しいアプローチかどうかはわかりませんが、それは機能しており、コメントを歓迎します。
何が問題で、何をしようとしているのかを明確にするためです。
内部に約 10 個ほどのフィールドを持つコア データ エンティティcompany
がありますが、一度にすべてをリストするのではなく、出力されたフィールドをグループ化したいと考えていました。
たとえば、「cash」、「marketingBudget」、「seoBudget」など、現金に関するフィールドが 6 つほどあり、このデータを 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 を使用してその内容を取得し、cellForRowAtIndexPath cell.textLabel.text 値で tableView コントローラーに表示できるという考えです。
もう少し深く掘り下げて、サブタイトルがどうあるべきかなど、PLIST に詳細情報を含めることができます。
とにかく、コメントや考えを歓迎します。
ありがとう。