0

将数据从 FirstViewController 传递到 DetailViewController。我无法在 DetailViewController 中设置标签文本;FirstViewController 是一个表格视图,它很好。

我使用方法 updateRowNumber 来设置 rowNumber 。在 DetailViewController 中,我可以使用调试器查看 rowNumber 是否正确。但标签的文本未显示在视图上。

任何人都可以帮助我吗?

在我的 FirstViewController

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

if (dvController == nil)
{
    DetailViewController *aController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

    self.dvController = aController;

    [aController release];
}   

[[self navigationController] pushViewController:dvController animated:YES];
[dvController updateRowNumber:indexPath.row];


}

在我的 DetailViewController.h

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController
{
    int rowNumber;
    IBOutlet UILabel *message;
}

@property(readwrite) int rowNumber;
@property(nonatomic, retain) IBOutlet UILabel *message;
- (void) updateRowNumber:(int) theindex;


@end

在我的 DetailViewController.m

#import "DetailViewController.h"


@interface DetailViewController ()

@end

@implementation DetailViewController

@synthesize message, rowNumber;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void) updateRowNumber: (int) theindex
{
    rowNumber = theindex + 1;
    message.text = [NSString stringWithFormat:@"row %i was clicked", rowNumber];
}

- (void)dealloc
{
    [message release];
    [super dealloc];
}

- (void)viewDidLoad
{
    message.text = [NSString stringWithFormat:@"row %i was clicked ", rowNumber];
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewWillAppear:(BOOL)animated
{
    //message.text = [NSString stringWithFormat:@"row %i was clicked ", rowNumber];

    [super viewWillAppear: animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear: animated];
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
4

1 回答 1

1

您需要了解如何加载视图,该过程在文档中有很好的描述

发生的情况是view所有出口都nil在加载之前,您可以在配置出口之前view通过调用确保它已加载self.view;updateRowNumber:


另请注意,您最好[super viewDidLoad]在覆盖的开头 调用viewDidLoad,这是有道理的,因为您需要 UIViewContorller在执行一些自定义逻辑之前让其工作人员完成,这是不同的,因为您需要在标准触发dealloc之前执行您的逻辑。NSObject -dealloc希望可以理解。

于 2012-11-08T14:01:15.197 回答