1

我的应用程序有核心数据和两个视图 CoursesTableViewController 和 DetailViewController。

如果用户点击 Detail Disclosure 按钮转到 DetailViewController 以显示一些详细信息。

该应用程序将 didSelectRowAtIndexPath 和 didDeselectRowAtIndexPath 用于其他事情。

CoursesTableViewController.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
        [[segue destinationViewController] setDetailItem:object];

    }

}

DetailViewController.h

@property (strong, nonatomic) id detailItem;

@property (weak, nonatomic) IBOutlet UITextField *courseCodeLabel;
@property (weak, nonatomic) IBOutlet UITextField *courseNameLabel;

细节视图控制器.m

@interface DetailViewController ()
- (void)configureView;
@end

@implementation DetailViewController

@synthesize detailItem = _detailItem;
@synthesize courseCodeLabel = _courseCodeLabel;
@synthesize courseNameLabel = _courseNameLabel;


#pragma mark - Managing the detail item



- (void)setDetailItem:(id)newDetailItem
{
    if (_detailItem != newDetailItem) {
        _detailItem = newDetailItem;

        // Update the view.
        [self configureView];
    }
}

- (void)configureView
{
    // Update the user interface for the detail item.

    if (self.detailItem) {
        self.courseCodeLabel.text = [[self.detailItem valueForKey:@"courseCode"] description];
        self.courseNameLabel.text = [[self.detailItem valueForKey:@"courseName"] description];

    }
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self configureView];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    self.courseCodeLabel = nil;
    self.courseNameLabel = nil;

}

问题是当我点击 Detail Disclosure 时,segue 效果很好,但在 DetailViewController 中, courseCodeLabel 和 courseNameLabel 中没有值。

4

1 回答 1

1

导入并尝试投射目标视图控制器。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

if ([[segue identifier] isEqualToString:@"showDetail"]) {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];

DetailViewController * detailVC = (DetailViewController *)[segue destinationViewController];

[detailVC setDetailItem:object];

}

}
于 2012-08-13T14:04:59.220 回答