Objective C - 将一个值从 UIViewController 传递给 UIView - 我不断得到 null

Posted

技术标签:

【中文标题】Objective C - 将一个值从 UIViewController 传递给 UIView - 我不断得到 null【英文标题】:Objective C - Pass a value from UIViewController to UIView - I keep getting null 【发布时间】:2013-10-06 09:15:19 【问题描述】:

首先,让我说我是 Objective C 的新手。

我基本上是在尝试将 viewController (UIViewController) 中的 originalPriceOnGraph 变量传递给 GraphView (UIView) 中的原始变量。但是,当我尝试显示原件时,我不断得到 0.00。我不明白到底是什么问题。这是我的一些代码:

GraphView.h

@interface GraphView : UIView
@property (nonatomic) double original;
@end

GraphView.m

@implementation GraphView
@synthesize original;

- (id)initWithFrame:(CGRect)frame

   //some code here

- (void)drawRect:(CGRect)rect;

   NSLog(@"%.2f", original);
   //some more code here

@end

ViewController.m

@interface OtherViewController ()
@end
@implementation OtherViewController
@synthesize originalPriceOnGraph;
@synthesize graph;

- (void)viewDidLoad

    [super viewDidLoad];
// Do any additional setup after loading the view.

   originalPriceOnGraph = 20.00;

   graph = [[GraphView alloc] init];
   graph.original = originalPriceOnGraph;


- (void)didReceiveMemoryWarning

   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.

@end

ViewController.h

@interface OtherViewController : UIViewController
@property (strong, nonatomic) GraphView *graph;
@property (nonatomic) double originalPriceOnGraph;
@end

提前谢谢你!

编辑:我能够通过在 OtherViewController 和 GraphView 之间创建一个 IBOutlet 来解决这个问题。我还去掉了 ViewController.m 中 GraphView 的 alloc init 语句。谢谢大家的建议!

【问题讨论】:

有一点要确定的是,viewDidLoad中GraphView的alloc/init是GraphView的only alloc/init。在类的一个实例中设置一个值并期望它出现在另一个实例中是一个典型的新手错误。 【参考方案1】:

您确定 GraphView 的 drawRect: 方法在您设置它的“原始”属性之前没有被调用吗?

如果是这样,请尝试使用 original 的默认值初始化 GraphView 的任何实例。

在 GraphView.h 中:

-(id)initWithOriginal:(double)original;

在 GraphView.m 中:

-(id)initWithOriginal:(double)original

    self = [super init];
    if (self) 
        [self setOriginal:original];
    
    return self;

在 ViewController.m 中:

-(void)viewDidLoad

    [super viewDidLoad];

    originalPriceOnGraph = 20.00;

    [self setGraph:[[GraphView alloc] initWithOriginal:originalPriceOnGraph]];

【讨论】:

【参考方案2】:

使用:

self.graph = [[GraphView alloc] init];

self.graph.original = originalPriceOnGraph;

【讨论】:

以上是关于Objective C - 将一个值从 UIViewController 传递给 UIView - 我不断得到 null的主要内容,如果未能解决你的问题,请参考以下文章

将值从 Objective-C 类传递给 Swift TableViewCell

如何将布尔值从应用程序委托传输到视图控制器?

将值从一个函数传递到另一个C ++

如何使用evaluateJavaScript 将数据从WKWebview 发送到HTML 文件| iOS | Objective-C

如何使用LINQ C#将一些属性的值从一个列表更改为另一个列表:

C ++将值从一个类传递到抽象类