Вы слишком много думаете о классах (как, казалось бы, своего рода «отдел» кода) и недостаточно о предметах, и ваша формулировка и ваша проблема демонстрируют это.
У вас есть экземпляр otherClass
, создающий второй экземпляр класса AppDelegate
. У вас уже был один экземпляр AppDelegate
, который является действительным делегатом приложения (потому что, я полагаю, он есть у вас в кончике и подключен к выходу delegate
приложения); теперь, в -[otherClass awakeFromNib]
, вы создаете другое.
Затем вы указываете этому второму экземпляру AppDelegate
установить для его свойства teststring
значение @"Test"
, а затем запрашиваете у вашего второго экземпляра AppDelegate
значение этого свойства, и ваш второй экземпляр AppDelegate
покорно показывает Вы значение, которое вы дали ему.
Первый экземпляр не имеет того же значения для своего свойства teststring
, поскольку объект otherClass
никогда не давал этому экземпляру значение для своего свойства teststring
. Обратите внимание, что переменные, которые вы определяете в разделе @interface
, являются переменными instance , поэтому разные экземпляры класса могут и обычно будут иметь разные значения в этих переменных. Свойства аналогичны для каждого экземпляра и обычно поддерживаются этими переменными экземпляра.
AppDelegate
A (реальный делегат приложения, созданный в nib) и AppDelegate
B (созданный объектом otherClass
, а не делегатом что-либо) - это два отдельных экземпляра AppDelegate
, с отдельным teststring
переменные.
Таким образом, решение: пусть экземпляр otherClass
говорит с реальным делегатом приложения, а не с экземпляром AppDelegate
, который он создал сам. Вы можете запросить у приложения его делегат или (если объект otherClass
находится в перте MainMenu) дать ему выход для делегата приложения, так же как приложение.
Тем не менее, добавление слишком большого количества материала в класс делегата приложения - плохой дизайн; Каждый класс должен иметь одну конкретную цель и, как правило, должен вписываться в одну из классификаций Model, View и Controller. Итак, предполагая, что ваш otherClass
объект должен быть контроллером, переместите свойство в otherClass
и сделайте этот объект контроллером того, что нуждается в свойстве.