В Какао каждый объект с делегатом имеет только одного делегата (в любой момент времени). Этот делегат является единственным объектом, который получает сообщения делегата. Нет реальной концепции, что «оба объекта зарегистрированы для получения сообщений делегатов». Мое подозрение здесь заключается в том, что когда вы нажимаете MessageViewController, он устанавливает себя в качестве делегата хранилища данных, а затем ContactsViewController никогда не видит эти сообщения снова, потому что он не устанавливает себя обратно.
Я не знаю, как структурирован ваш код, но вы можете просто передать делегат каждый раз, когда контроллеры меняют представление, чтобы активным был текущий делегат.
В Какао шаблон уведомления (см. NSNotificationCenter) используется, когда объекту необходимо «передать» информацию нескольким другим объектам. На самом деле делегаты - это то, на что они похожи: объект, на который другой объект может полагаться, чтобы «сотрудничать» с ним и предоставлять ключевые функции. Это более интимные отношения, чем у наблюдателя уведомлений.