如何从另一个视图控制器启动视图控制器?

时间:2014-12-10 19:12:46

标签: ios objective-c iphone

我有一个名为StackViewController的表视图控制器,这是我在CreateViewController中创建的todo列表... 我在StackViewController中有一个名为currentTarget的NSString属性,它代表堆栈中的第一个属性:

import <UIKit/UIKit.h>

@interface StackTableViewController : UITableViewController

@property (nonatomic, strong) NSString *currentTarget;

@end

这个属性在表视图中保存第一个NSString对象,我得到它:

#import "StackTableViewController.h"
#import "Target.h"
#import "CoreDataStack.h"

@interface StackTableViewController () <NSFetchedResultsControllerDelegate>

@property (nonatomic, strong) NSFetchedResultsController *fetchedResultController;

@end

@implementation StackTableViewController

- (void)viewDidLoad {

    [super viewDidLoad];
    [self.fetchedResultController performFetch:nil];
    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0];
    Target *target = [self.fetchedResultController objectAtIndexPath:indexPath];
    self.currentTarget = target.body;
}

现在,当我登录到调用HomeViewController的主页时,我想启动StackTableViewController并获取其currentTatget属性值... 我知道有一个委托可以帮助您在发生更改时通知其他视图,但在我的情况下,我希望在我进入此页面之前获取此属性值(StackTableViewController),因为HomeViewController是第一个视图控制器,加载(我的初始视图控制器)和我刚刚登录到应用程序并使用它填充标签时访问此属性的内容。

我该怎么做?

我想也许是这样的:

#import "HomeViewController.h"
#import "CreateViewController.h"
#import "StackTableViewController.h"

@interface HomeViewController ()

@property (strong, nonatomic) IBOutlet UILabel *targetLabel;

@end

@implementation HomeViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    StackTableViewController *vc = [[StackTableViewController alloc] init];
    NSString *current = vc.currentTarget;
    self.targetLabel.text = current;
}

但我在这里遗漏了一些东西......我的标签没有填充...... 我认为观点生命周期有一些东西。

我是新手,请帮我解决这个问题...谢谢

1 个答案:

答案 0 :(得分:0)

不要在viewDidLoad中对图形做任何事情。你想要做的最早的是viewWillAppear(大部分时间),偶尔你需要在viewDidAppear中进行。 在viewWillAppear中尝试相同的代码,它应该可以工作。

哦,对了,因为你的其他viewController是在viewDidLoad中设置的,你需要调用 在分配init之后,stackTableViewController上的[stackTableViewController视图]。看起来很奇怪,但这确实有效。这是因为StackTableViewController在初始化时没有完成计算,它在viewDidLoad委托中运行它。

- (void)viewDidLoad {
    [super viewDidLoad];
    StackTableViewController *vc = [[StackTableViewController alloc] init];
    [vc view];
    NSString *current = vc.currentTarget;
    self.targetLabel.text = current;
}