Я официально застрял. Я пытаюсь отправить данные (NSString) с одного контроллера представления на другой. Я считаю, что все правильно установлено, но это не сработает. Я сделал пример приложения для тестирования. Если кто-то может посмотреть и посоветовать, я буду очень благодарен.Настройка делегирования с помощью Xcode 6 и OBJ C
Пример приложения имеет 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
@Thorsten: Не очевидно. Что также указывает на то, что здесь может быть целая куча нулевой проверки. NSParameterAssert() удобен ... – stevesliva
Что значит «это не работает»? вы получаете сообщение об ошибке? – MendyK