1

私は多くの投稿を調べましたが、これを解決する方法がまだわかりません。誰かが助けてくれることを願っています。

最後のデータソースメソッドであるcellForRowに到達するまで機能します。その時点で、セクションごとに正しいNSSetを取得できますが、順序付けされていません。リレーションシッププロパティへのイントロペクションは行に対してどのように機能しますか?

cellForRowで文字列リテラルを使用すると、各セクションで正しい行数を取得できますが、そこにある管理対象オブジェクトへの接続は明らかにありません。

NSSetリレーションシップから行を設定するにはどうすればよいですか?すべての洞察に感謝

カテゴリ<<--->> Person
cName ---------- pName

人間関係の
人々----------カテゴリ

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [[self.fetchedResultsController fetchedObjects] count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section     {
Category* cat = [[self.fetchedResultsController fetchedObjects] objectAtIndex:section];
return [[cat people] count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
Category* cat = [[self.fetchedResultsController fetchedObjects] objectAtIndex:section];
NSNumber *rowCount = [NSNumber numberWithUnsignedInteger:[[cat people] count]]; 
return cat.cName;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    
NSManagedObject *mo = [[fetchedResultsController fetchedObjects] objectAtIndex:index.row]];

// returns the correct set but unordered, possibly work with this to populate the rows?
//NSSet *theSet = [[NSSet alloc] initWithSet: [mo valueForKeyPath:@"people.pName"]];

// doesn't work
// cell.textLabel.text = [NSString stringWithFormat:@"%@",[mo valueForKeyPath:@"people.pName"]];

cell.textLabel.text = @"something";
return cell;
}
4

1 に答える 1

0

問題は、オブジェクトをフェッチしているが、オブジェクトCategoryを使用して行を設定しようとしていることPersonです。Personオブジェクトはフェッチされたオブジェクトではないため、順序付けされていません。これらは、テーブルビューの論理構造とは関係ありません。Category実際、同じPersonオブジェクトが同じテーブルに何度も表示されるような多くの関係があるため、それらはできません。

最善の解決策は、これを2つの階層テーブルに分解することです。1つはカテゴリリストを表示し、もう1つは最初のテーブルビューで選択されたオブジェクトPersonpeople関係にあるオブジェクトを表示します。Category

次のような方法を試して、現在のデザインで動作させることができます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
    Category *sectionCategory=[[fetchedResultsController fetchedObjects] objectAtIndex:indexPath.section];
    NSSortDescriptor *sort=[NSSortDescriptor sortWithKey:@"pname" ascending:NO];
    NSArray *sortedPersons=[sectionCategory.people sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
    Person *rowPerson=[sortedPersons objectAtIndex:indexPath.row];
    cell.textLabel.text = rowPerson.pname;

これは、データが静的である場合に機能します。表の表示中に変化すると問題が発生します。行にデータを入力するたびにオブジェクトのすべてのPersonオブジェクトをフェッチして並べ替える必要があるため、多少のオーバーヘッドが発生します。sectionCategory

2つのテーブルビューソリューションを強くお勧めします。これは、階層データに適したソリューションです。

于 2011-04-11T01:05:31.357 に答える