【发布时间】:2015-02-23 15:18:55
【问题描述】:
我正式陷入困境。我正在尝试将数据(NSString)从一个视图控制器发送到另一个。我相信我已经正确设置了所有内容,但它不起作用。我制作了一个示例应用程序进行测试。如果有人可以查看并提供建议,我将非常感激。
示例应用有 2 个视图控制器。 VC1 有一个简单的 UITextView。 VC2 有一个 UITextField。通过按下 VC1 上的按钮,VC2 模态出现。然后用户可以将数据输入到 VC2 中,当按下关闭按钮时,数据应该填充 VC1 中的文本视图。问题是这不起作用。
感谢观看。
VC1.h
#import <UIKit/UIKit.h>
#import "ViewController2.h"
@interface ViewController : UIViewController <ViewController2Delegate>
@property (weak, nonatomic) IBOutlet UITextView *mainTextView;
@end
VC1.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)dataForMainViewSet:(ViewController2 *)sender dataToSet:(id)data {
self.mainTextView.text = data;
}
@end
VC2.h
#import <UIKit/UIKit.h>
@class ViewController2;
@protocol ViewController2Delegate <NSObject>
@optional
- (void)dataForMainViewSet:(ViewController2 *)sender dataToSet:(id)data;
@end
@interface ViewController2 : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *textField;
@property (weak, nonatomic) id <ViewController2Delegate> delegate;
- (IBAction)closeVC2;
@end
VC2.m
#import "ViewController2.h"
#import "ViewController.h"
@interface ViewController2 () <UITextFieldDelegate>
@end
@implementation ViewController2
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.textField.delegate = self;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
- (IBAction)closeVC2 {
[self.delegate dataForMainViewSet:self
dataToSet:self.textField.text];
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
【问题讨论】:
-
self.delegate in closeVC2 没有设置,是吗?
-
@Thorsten:显然不是。这还指出,这里可能会进行大量的零检查。 NSParameterAssert() 很方便...
-
“这不起作用”是什么意思?你有错误吗?
-
来自 VC2 的数据永远不会到达 VC1。如何设置 self.delegate?也许这就是问题所在。
-
在你的 VC1 中,在展示 VC2 之前,将 vc2.delegate 设置为 self(这应该是 VC1 实例)。
标签: ios objective-c xcode