Мне кажется, я знаю, что происходит.
В вашем FirstViewController
вы объявляете внутреннюю переменную (ivar):
IBOutlet UITextView* chat;
Затем, кроме того, вы объявляете свойство:
@property (nonatomic, retain) UITextView* chat;
Если не указано иное, каждое свойство Objective-C поддерживается автоматически синтезированным ivar, именем которого является имя свойства с префиксом _
перед ним (в данном случае _chat
).
Итак, у FirstViewController
есть два разных ивара для одной и той же вещи: chat
и _chat
.Я предполагаю, что методы, которые работают, используют chat
, а те, которые терпят неудачу, используют _chat
или self.chat
(который обращается к _chat
внутри).Это или наоборот.
Я предлагаю вам избавиться от всех иваров и работать только с помощью методов доступа к свойствам (self.propertyName
).Это делает свойства мгновенными и легко отличимыми от локальных переменных, а imho приводит к более читаемому и поддерживаемому коду.
Обратите внимание, что вы можете объявлять свойства как в .h
, так и в .m
файлы.Свойства, объявленные в файле .m
, будут видны только из этого файла.Я предлагаю вам объявить все свойства, которые не нужны вне класса в файле .m
.Это делает интерфейс вашего ViewController простым и чистым.
Лично я обращаюсь к иварам напрямую, только когда мне приходится перегружать или переопределять средства доступа к свойствам или если это эффективно повышает производительность (что не так часто встречается).