私には2つのエンティティ(および2つのtableViews)があります。最初のエンティティ名はPerson、2番目はEvent、最初のtableViewには人の名前があり、2番目のイベントではPersonとEventの間に1対多の関係があります。ユーザーが名前の1つをタップすると、2番目のtableViewにその人のイベント(タイプ)が表示されるようにしたいと思います。問題は、空のセルを取得することです。
これが私が新しいイベントを追加する方法です:
- (void) addEventControllerDidSave{
NSManagedObjectContext* context = [self managedObjectContext];
Event *newEvent = (Event *)[NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:context];
[newEvent setType:@"dennis"];
[currentPerson addEventsObject:newEvent];
NSError *error;
if (![[self managedObjectContext] save:&error])
{
NSLog(@"Problem saving: %@", [error localizedDescription]);
}
[self dismissViewControllerAnimated:YES completion:nil];
}
このメソッドは動的ではないことを知っています。テストのためだけに、常にイベントタイプ「dennis」を取得します。
私の2番目のtableViewメソッド:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[[self currentPerson] events] count];
}
最も重要な方法問題はここ(またはsaveメソッド)にあると思います:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"eventsCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (nil == cell)
{
NSEnumerator *enumerator = [[[self currentPerson] events] objectEnumerator];
Event *event = [[enumerator nextObject]objectAtIndexPath:indexPath];
[[cell textLabel]setText:[event type]];
}
return cell;
}
更新: ophychiusが言ったように、defineセルラインをifから移動し、次のように変更します。
//create cell use relation
NSArray *eventsArray = [[[[self currentPerson] events] objectEnumerator]allObjects];
Event *newEvent = [eventsArray objectAtIndex:indexPath.row];
[[cell textLabel]setText: [newEvent type]];