我有一个名为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;
}
但我在这里遗漏了一些东西......我的标签没有填充...... 我认为观点生命周期有一些东西。
我是新手,请帮我解决这个问题...谢谢
答案 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;
}