1

私の最初のビュー コントローラー はAllAthletes、すべてのコア データ エンティティの uitableview です。エンティティ「アスリート」が表示され、名前などのサブタイトル スタイル テーブル セルにプロパティが表示されます。ビュー セルをクリックすると、このビュー コントローラが選択されたエンティティの情報を渡すようにしたいのですが、この情報 (indexpath のマネージド オブジェクト、エンティティ、プロパティなど) を詳細ビュー コントローラーに渡す方法がわかりません。誰かが私を正しい方向に向けてもらえますか?

allathletes.m

-(void)viewWillAppear:(BOOL)animated{
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    _managedObjectContext = [appDelegate managedObjectContext];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *athlete = [NSEntityDescription entityForName:@"Athlete" inManagedObjectContext:_managedObjectContext];
    [request setEntity:athlete];
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"first" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];

    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (mutableFetchResults == nil){
        //handle error
    }
    [self setAthleteArray:mutableFetchResults];
    [self.tableView reloadData];
}



 //this is what I have so far
 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
 {
     if ([segue.identifier isEqualToString:@"setAthlete"]) {
         NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
         AthleteDetail *destViewController = segue.destinationViewController;
     }
 }

//i was also thinking something like this?
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIViewController* detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
    NSMutableString *object = thisArray[indexPath.row];
    detailViewController.passedData = object;
    [self.navigationController pushViewController:detailViewController animated:YES];
}

プッシュする 2 番目のコントローラーは AthleteDetail です。お時間をいただきありがとうございます。

4

1 に答える 1

3

2 つの異なる概念を混在させています。それ以外の

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIViewController* detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
    NSMutableString *object = thisArray[indexPath.row];
    detailViewController.passedData = object;
    [self.navigationController pushViewController:detailViewController animated:YES];
}

次のようなことをする必要があります

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:YOUR_SEGUE_IDENTIFIER sender:self];        
}

その後:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
 {
     if ([segue.identifier isEqualToString:YOUR_SEGUE_IDENTIFIER]) {
         NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
         AthleteDetail *destViewController = segue.destinationViewController;
         // set whatever you want here in your destination view controller
         destViewController.passedData = object;
     }
 }

Segue が Push Segue であることを確認してください。

于 2013-08-01T14:36:47.703 に答える