【发布时间】:2013-04-27 22:01:47
【问题描述】:
我有两个视图控制器。 MainViewController 推送 SignUp ViewController。一旦 SignUp View Controller 关闭,我需要访问 MainViewController 的同一实例来更新 UIButton.title。
.h 主视图
//MainViewController.h
#import <UIKit/UIKit.h>
@interface MainViewController : UITableViewController
-(void)loggedIn;
@end
.m
@interface MainViewController ()
@end
-(void)loggedIn
{
NSLog (@"This is Logged in inside MainView.m");
self.logInOutButton.title = @"Logout";
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UIViewController *destinationViewController = segue.destinationViewController;
Signup *signUp = [destinationViewController isKindOfClass:[SignUp class]] ? (Signup*)destinationViewController : nil;
signUp.mainViewController = self;
NSLog(@"Preapre For Segue %@", self);
}
.h 注册
#import <UIKit/UIKit.h>
#import "MainViewController.h"
@interface SignUp : UIViewController
@property (strong, nonatomic) MainViewController *mainViewController;
@end
.m
@synthesize mainViewController;
- (void) loggedIn
{
NSLog(@" MainViewController %@", mainViewController);
[mainViewController loggedIn];
self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
当我执行 NSLog 时,我得到了不同的值:
Preapre For Seg <STMainViewController: 0x9f7d600>
MainViewController (null)
【问题讨论】:
-
您是否尝试过在分配 mainViewController 后记录注册视图控制器是什么?看起来两者之间可能有一个中间控制器,很可能是导航控制器......
-
在设置
mainViewController属性之前检查signUp是否为nil。 -
参见stackoverflow.com/a/9736559/1271826的“传回数据”部分中对委托协议的讨论
-
您在类的声明中使用带有大写 U 的 SignUp。然后在 MainViewController 中使用带有小写 U 的 Signup。这将导致 signUp 为零。这可能是因为您在此处重新键入而不是复制和粘贴。如果是这种情况,请直接复制并粘贴,因为它可能会显示一些您没有预料到的错误。
标签: ios storyboard segue