Ios UILabel、UITextView等。。仅在VIEW中工作将显示、ViewDidLoad和don';不能动态变化

Ios UILabel、UITextView等。。仅在VIEW中工作将显示、ViewDidLoad和don';不能动态变化,ios,cocoa-touch,text,uilabel,iboutlet,Ios,Cocoa Touch,Text,Uilabel,Iboutlet,我有一个问题,我想要设置UILabel或UItextView或其他IBOUTLET对象的文本,但我只能在ViewWillExample和viewdidload方法中进行设置,如果我在代码中的其他方法中设置文本,请不要更改任何内容,以下是一个示例: 我有一个从另一个类检索字符串的方法,然后我想在uilabel中设置此字符串: - (void)setDetailItem:(id)newDetailItem { if (detailItem != newDetailItem) { NSLog

我有一个问题,我想要设置UILabel或UItextView或其他IBOUTLET对象的文本,但我只能在ViewWillExample和viewdidload方法中进行设置,如果我在代码中的其他方法中设置文本,请不要更改任何内容,以下是一个示例:

我有一个从另一个类检索字符串的方法,然后我想在uilabel中设置此字符串:

- (void)setDetailItem:(id)newDetailItem
{

if (detailItem != newDetailItem) {
    NSLog(@"SetDetailItem");
    [detailItem release]; 
    detailItem = [newDetailItem retain]; 
    detailString = [[FindStringClass alloc] init];
    // Update the view.

    detailItem = [detailString searchStringFor:detailItem.name];

    if (detailItem) {
        //
        NSLog(@"setDetail: %@",detailItem.stringName);
        [self configureView];
    }

  }
 }

  - (void)configureView {

NSLog(@"configure view: %@",detailItem.stringName);
mySerialTitle.text = detailItem.stringName;
}
NSLog可以工作,我可以在控制台中看到我的字符串,但是视图中的文本不会改变,相反,如果我在ViewWillDisplay或viewDidLoad方法中设置一个简单的文本,那么与iBooutlet的连接是正确的,如下所示:

- (void)viewDidLoad
{
mySerialTitle.text = @"CIAO";
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
这是调用函数,我从另一个视图调用setDeatItem:

  self.searchResultViewController.detailItem =    [myArray objectAtIndex:[indexPath row]];    
  [self.navigationController pushViewController:self.searchResultViewController animated:YES];
有人能帮我吗

编辑: 这是调用该方法的NSLog:

2012-03-19 12:51:02.617 TestApp[292:b603] SetDetailItem
2012-03-19 12:51:06.161 TestApp[292:b603] setDetail: Chicken
2012-03-19 12:51:06.162 TestApp[292:b603] configure view: Chicken
2012-03-19 12:51:06.175 TestApp[292:b603] View DidLoad

我从Tableviewcontroller调用searchviewcontroller视图我按一行,然后调用新视图并传递属性。

视图加载到内存后调用viewDidLoad。见苹果文档。将视图加载到内存后,在视图出现之前,调用viewWillAppear

在加载视图之前,不能更改其属性。因此,检查您的代码路径(甚至可能注销这些方法以及viewDidLoad和ViewWillAspect方法),并查看在调用viewDidLoad之前是否设置了这些属性(日志输出将使其易于查看)

从viewDidLoad文档:

此方法在视图控制器加载其视图后调用 将层次结构放入内存。无论 视图层次结构是从nib文件加载或通过编程方式创建的 在loadView方法中。您通常重写此方法以执行 对从nib文件加载的视图进行附加初始化

您添加的日志语句清楚地表明您正在加载视图之前对其进行操作。如您所见,在viewDidLoad之前调用setDetail

2012-03-19 12:51:02.617 TestApp[292:b603] SetDetailItem
2012-03-19 12:51:06.161 TestApp[292:b603] setDetail: Chicken
2012-03-19 12:51:06.162 TestApp[292:b603] configure view: Chicken
2012-03-19 12:51:06.175 TestApp[292:b603] View DidLoad
如果要在正在推送的视图上设置数据,则有两个选项

  • 调用setDetail,但在setDetail中仅设置iVar数据-不要操纵视图。然后,在viewDidLoad/WILLEASE中,读取iVar数据并操作视图

  • 使用代理将您正在推送的视图回调到启动视图。看

  • 上面的函数,无论你在哪里调用它的形式..我不知道。。你一定要在下班后打电话

      [self.navigationController pushViewController:self.searchResultViewController animated:YES];
    

    如果你在这之前叫它。。然后您的视图没有正确加载,将文本设置为标签将不起作用。

    发布更多代码…为您提供的第一个函数提供完整的代码。.调用时。.我已经编辑了…但是NSLog工作,所以我不明白为什么不更改标签中的文本…如果我这样做:mySerialTitle.text=@“CIAO”;在configure view方法或setDetailItem方法中,不要更改文本…我将添加断点并检查是否实际调用了配置视图。。。您还可以知道何时调用第一个函数。。给出调用它的代码..也发布该函数..是的,在configure方法中输入,我很遗憾NSLog可以工作,并在控制台中显示我的字符串,断点也可以工作,所有工作,但是iOutlet不起作用…只在viewdidload和ViewWillAppari中起作用当您询问mei知道何时调用viewdidload和ViewWillDisplay时,我的问题是我无法在代码中设置uilabel的文本,并且只在ViewWillDisplay和viewdidload方法中起作用,我已经编写了控制台日志,看起来它被称为viewdidload的第一个,这就是问题所在吗?如果你的代码被首先调用,然后viewdidload被调用(之后),那么是的,这就是问题所在。在加载视图之前,您无法对其进行操作。是的,这就是问题所在,因此我如何使用setDetailitem方法将属性传递给其他视图?我将答案附加了您的选项。
      [self.navigationController pushViewController:self.searchResultViewController animated:YES];