私は今、私の問題への答えを持っていますが、私はその正しいアプローチであるかどうかわかりませんが、それは働いており、コメントを歓迎します。
問題が何であるか、私が何をしようとしているかを明確にするだけです。
私はコアデータエンティティcompany
を持っていますが、その中に約10個のフィールドがありますが、それらをすべて一挙にリストするのではなく、出力フィールドをグループ化したいと考えました。
たとえば、「cash」、「marketingBudget」、「seoBudget」などの現金に関連する約6つのフィールドがあります。このデータをtableViewにグループ化したいのですが、問題はわかりませんでしたtable.field.xがgroup.xに属しているように関係を設定する方法などです。
私が来た答えは、コアデータエンティティの構造をほぼ反映するPLIST /辞書を使用することでした。表示したいグループに構造体を割り当てます。
私の辞書は次のようになっています。
(ルート)
- > CompanyTpl(アレイ)
- >アイテム0(辞書)
--->セクション(文字列)= "一般"
--->子供(配列 ) ------>アイテム0(辞書)
---------- >キー=「名前」
---------->値=「会社名」... Key
は、コアデータを使用するための参照と表示となり
必要に応じてその内容
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;
}
アイデアは、その内容を取得し、cellForRowAtIndexPath cell.textLabel.text値でのtableViewコントローラ上でそれを表示するには、コアデータを参照するとき、私はKEYを使用できることになります。
一つは、深さにさらに少し行くと、このような字幕がどうあるべきかなどPLISTでより多くの情報を持っている、など
はとにかく、コメントや考えを歓迎することができます。
ありがとうございました。
私はこの種のものをより高度に制御したい人には便利なhttp://code.google.com/p/coredatalibrary/を見つけました。 – zardon