1

私のView Controllerには、次の2つのこと-(void) showDescription: (id) descriptionを行うメソッドがあります。

  1. ラベルに説明を表示します
  2. ビューに setNeedsDisplay を与えるメソッドをビューで実行します。

ここに奇妙なことがあります:

コード内の別のメソッドから showDescription を呼び出すと、showdescription に移動し (NSLog があります)、説明を読み取ります (別の NSLog) が、ラベルを変更したりsetNeedsDisplay(NSLog なしで) ビュー メソッドを実行したりしません。

しかし...ボタンから同じメソッドを呼び出すと、問題なく機能します。label.textを配置し、ビューを再描画します。

showDescriptionビュー メソッドに 1 つと1 つの 2 つのブレークポイントを配置すると、同じ動作に気付きました。最初のケースでは、view メソッドには行きませんが、2 番目 (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];

}

graphView.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であると確信していますか?labelDescriptionかもしれませんか?プラス:おそらく「[self.graphViewredrawView];」;は絶対にしないでください。代わりに「[self.graphViewsetNeedsDisplay:YES]」にする必要があります。「showDescription」は適切なメソッド名ですか?(「hideDescription」メソッドはありますか?)

于 2012-12-03T17:13:27.960 に答える