我是iPhone初学者。

我有2节课。 TestViewController(这与情节提要中的视图链接)和ViewController

我正在尝试使用[tc refresh:val];作为TestViewController类的参数调用val中的方法(ViewController)。我从日志中可以看到val到达了TestViewController,但是由于某种原因,标签不会更新,并且我也没有获得在视图中设置的标签的当前文本。它给出null值。请查看代码并登录,获取并建议我如何通过从VCTVC调用方法来更新标签。

TestViewController.h

#import <UIKit/UIKit.h>
#import "ViewController.h"

@interface TestViewController : UIViewController

@property (retain, nonatomic) IBOutlet UILabel *lblDisp;

- (IBAction)chngText:(id)sender;
- (void)refresh:(NSString *)val;

@end


TestViewController.m

#import "TestViewController.h"
#import "ViewController.h"

@implementation TestViewController
@synthesize lblDisp;
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"TEST VC LOADED");
    NSLog(@"TEXT CUrret VALUE SUPERVIEW %@",lblDisp.text);
}

- (IBAction)chngText:(id)sender {
    ViewController *dd=[[ViewController alloc]init];
    [dd display];
}

-(void)refresh:(NSString *)val{
    NSLog(@"Value of Val = %@",val);
    NSLog(@"TEXT CUrret VALUE %@",lblDisp.text);
    lblDisp.text=val;
}
@end


ViewController.h

#import <UIKit/UIKit.h>
#import "TestViewController.h"

@interface ViewController : UIViewController

-(void)display;

@end


ViewController.m

#import "ViewController.h"
#import "TestViewController.h"

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"VC LOADED");
}

-(void)display{
    NSLog(@"Reached VC");
   NSString *val=@"1";
    TestViewController *tc=[[TestViewController alloc]init];
    [tc refresh:val];
}

@end


日志记录

2013-07-24 03:13:36.413 Simple test[38477:11303] TEST VC LOADED
2013-07-24 03:13:36.415 Simple test[38477:11303] TEXT CUrret VALUE SUPERVIEW sdfgdfgd
2013-07-24 03:13:37.909 Simple test[38477:11303] Reached VC
2013-07-24 03:13:37.910 Simple test[38477:11303] Value of Val = 1
2013-07-24 03:13:37.911 Simple test[38477:11303] TEXT CUrret VALUE (null)

最佳答案

您的问题在于将价值传递回去的方式。

TestViewController *tc=[[TestViewController alloc]init];
[tc refresh:val];


第一行创建并初始化tc类的新实例TestViewController。这使您可以访问其方法,但这并不意味着您在访问最初创建的实例或最初分配的数据。这意味着标签lblDisp以及新的TestViewController实例的其余所有属性均为零。

基本上,您不能使用此策略来回传递数据。看到这样的帖子:

Passing Data between View Controllers

关于iphone - UILabel未使用其他类的值更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17832404/

10-09 01:02