1

在我的视图控制器中,我有一个方法-(void) showDescription: (id) description,女巫做了两件事

  1. 在标签中显示描述
  2. 并在视图中运行一个为视图提供 setNeedsDisplay 的方法。

现在这是奇怪的事情:

如果我从代码中的另一个方法调用 showDescription,它会转到 showdescription(我有一个 NSLog),读取描述 OK(另一个 NSLog),但不会更改标签或使用setNeedsDisplay(没有 NSLog)运行视图方法。

但是...如果我从按钮调用相同的方法,它就可以正常工作:放置 label.text 并重绘我的视图。

showDescription当我在视图方法中放置两个断点时,我实现了相同的行为。在第一种情况下,它不会转到视图方法,而在第二种情况下(UIAction)它会。

这有多奇怪?有人知道为什么吗?因为我迷路了……

非常感谢

克莱姆科尔

类:

  • GraphViewController:UIViewController
  • 图形视图:UIView

** GraphViewController.m * ** * ***

    -(void) showDescription: (id) description
    {    
      NSString* text= [(NSString*) description copy];
      self.lableDescription.text=text; //display description in label
     [self.graphView redrawView];  
    }


    -(void)displayGraph
    {
        NSLog(@"GraphViewController.displayGraph");
        NSLog(@"self.programData %@",self.programData); //these work fine
        NSLog(@"description lable %@",self.programDescriptionData);


      [self showDescription:self.programDescriptionData];
        [self.graphView redrawView];

    }

    - (IBAction)redraw {
  NSLog(@"IBAction redraw");
  NSLog(@"myData %@",self.graphView.myData);
  [self showDescription:@"CCCC"];
  [self.graphView redrawView];

}

图视图.m * **

-(void)redrawView //public method
{
    NSLog(@"redrawView");
     [self setNeedsDisplay];
}

我在 Lion 10.7.4 上使用 Xcode 4.3.3

这是发生的事情:

如果我调用 displayGraph,programData 和 programDescriptionData 很好。(NSLog 正确显示它)但是......它不会更改标签,也不会转到 redrawView(没有 NSLog redrawView)。

Here is the log:
2012-07-08 12:29:19.193 CalculatorGraph[2641:f803] GraphViewController.displayGraph
2012-07-08 12:29:19.194 CalculatorGraph[2641:f803] self.programData (
    22
)
2012-07-08 12:29:19.194 CalculatorGraph[2641:f803] description lable 22
2012-07-08 12:29:19.195 CalculatorGraph[2641:f803] text is 22

现在,如果我按下按钮,一切似乎都可以工作:更新标签并重绘视图和视图中的 drawRect。看到我的问题了吗?

   2012-07-08 14:16:54.358 CalculatorGraph[2743:f803] IBAction redraw
2012-07-08 14:16:54.358 CalculatorGraph[2743:f803] myData <GraphViewController: 0x6d3f1f0>
2012-07-08 14:16:54.359 CalculatorGraph[2743:f803] text is CCCC
2012-07-08 14:16:54.359 CalculatorGraph[2743:f803] redrawView
2012-07-08 14:16:54.360 CalculatorGraph[2743:f803] redrawView
2012-07-08 14:16:54.362 CalculatorGraph[2743:f803] graphView.drawRect
2012-07-08 14:16:54.363 CalculatorGraph[2743:f803] data in graphView DrawRect is: <GraphViewController: 0x6d3f1f0>

我的故事板的屏幕截图:请参阅我评论中的链接...

谢谢

4

1 回答 1

0

你确定你的 IBOutlet 是 lableDescription 吗?可能是标签描述?另外:你可能永远不应该 "[self.graphView redrawView];"; 您应该改为“[self.graphView setNeedsDisplay:YES]”。“showDescription”是适当的方法名称吗?(你有“hideDescription”方法吗?)。

于 2012-12-03T17:13:27.960 回答