Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 访问uitableviewcell子类中的公共变量_Ios_Objective C - Fatal编程技术网

Ios 访问uitableviewcell子类中的公共变量

Ios 访问uitableviewcell子类中的公共变量,ios,objective-c,Ios,Objective C,我想在有人点击时更改UILabel的值 我要将其更改为的值在ViewController本身中定义 现在,我正在使用以下代码: - (void)tapOnBalance { TimelineViewController *timelineVC = [[TimelineViewController alloc]init]; if(timelineVC.oldBalance && timelineVC.newBalance){ NSTimeInterval duratio

我想在有人点击时更改
UILabel
的值

我要将其更改为的值在
ViewController
本身中定义

现在,我正在使用以下代码:

- (void)tapOnBalance {
  TimelineViewController *timelineVC = [[TimelineViewController alloc]init];
  if(timelineVC.oldBalance && timelineVC.newBalance){
  NSTimeInterval duration = 0.5f;
  [UIView transitionWithView:self.amountLabel
                    duration:duration
                     options:UIViewAnimationOptionTransitionCrossDissolve
                  animations:^{
                    self.amountLabel.text = timelineVC.newBalance;    
                  } completion:^(BOOL finished){

                    [UIView animateWithDuration:duration delay:duration options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
                      self.amountLabel.text = timelineVC.oldBalance;
                    } completion:^(BOOL finished){
                        NSLog(@"finished");
                   }];
  }];
  }
}
但是,因为我可能正在将
TimelineViewController
初始化为一个新的INSACE,所以所有的初始值都是零,因此
if/else
语句中的代码块永远不会运行


如何访问这些公共值而不创建
TimelineViewController
的新实例?

没错,每次调用
tapOnBalance
时,都会创建
TimelineViewController
的新实例

我不确定您的体系结构是什么样的,但我想到的解决方案是在实现
tapOnBalance
的视图控制器内部为
TimelineViewController
创建一个属性:

@property (nonatomic, strong) TimelineViewController *timelineVC;
在文件头或专用接口中。
然后在
viewDidLoad
中初始化一次,并使用
self.timelineVC
访问它,这真是个坏主意。单元格不应了解任何视图控制器。您的单元类应该定义一个协议并具有委托属性。然后,视图控制器可以是单元格的委托。然后,单元格可以要求其委托在需要时提供更新的值。这使您的单元格可以在不知道数据从何处获取的情况下工作。@rmaddy似乎是合法的,但同样的任务需要做更多的工作。当我这样做的时候,会造成什么样的恶果呢?这太耦合了。您的计算单元需要太多关于特定视图控制器的知识,更糟糕的是,它的数据是如何设置的。如果在第二视图控制器中需要相同类型的表格单元,会发生什么情况?当然,现在让计算单元直接从特定的视图控制器访问数据既快又容易,但从长远来看,你会后悔的。随着情况的变化,您的代码稍后将需要更多的工作。另外,它完全违背了好的MVC设计。在TimelineViewController初始化后,它不会更新newBalance和oldBalance在哪里以及如何设置它们?