Я думаю, вы можете быть немного озадачены тем, для чего используется Delegation
и почему.
Например, вы можете захотеть создать протокол в подклассе UIViewController
, если вы выполняли какое-то действие в этом ViewController
и вам нужно было сообщить другому подклассу, что это действие или результат этого действие.
Теперь для того, чтобы подкласс, который хочет знать о действии (получатель), должен соответствовать этому протоколу в своем заголовочном файле.
Вы также должны «установить» delegate
на receiving class/controller
.
Есть много способов получить ссылку на receiving controller/class
, чтобы установить его как delegate
, но распространенной ошибкой является выделение и инициализация нового экземпляра этого класса для установки его в качестве делегата, когда этот класс уже имеет был создан. То, что это делает, устанавливает вновь созданный класс в качестве делегата вместо класса, который уже был создан и ожидает сообщения.
Что вы пытаетесь сделать, это просто передать значение Вновь созданному классу. Поскольку вы только что создали этот класс UIViewController
, все, что для этого необходимо, - это свойство в receiver(ViewControllerTwo)
.
В вашем случае NSString
:
@Property (nonatiomic, retain) NSString *string; //goes in ViewControllerTwo.h
и, конечно, не забудьте в основном:
@synthesize string; //Goes in ViewControllerTwo.m
Теперь в вашем ViewControllerTwo
.
нет необходимости устанавливать сеттер.
- (void)setString:(NSString *)str //This Method can be erased
{ //The setter is created for free
self.myString = str; // when you synthesized the property
}
Сеттер и геттеры свободны при использовании @synthesize
. Просто передайте значение в ViewController
. Реализация идентична вашему коду за исключением делегата:
ViewControllerTwo *two = [[ViewControllerTwo alloc] initWithNibName:@"ViewControllerTwo" bundle:nil];
[two setString:theString];
[self.navigationController pushViewController:two animated:YES];
[two release];