Код выше на самом деле правильный. Вы передаете сообщения одиночному делегату приложения и, конечно же, не хотите сохранять сильную ссылку на него.
Без дополнительного кода немного сложно увидеть поток программы, но похоже, что вы передаете startUpdatingLocation в LocationManager, на который ссылается ваш подкласс делегата приложения. Сначала я проверю, установлен ли делегат LocationManager для класса, из которого вы получили ваш второй фрагмент, иначе он никогда не будет обработан. Однако, похоже, что это так, как вы, кажется, видите обновление в своих инструкциях NSLog.
Во-вторых, я бы помнил, что LocationManager будет обновляться асинхронно. Не ожидайте получать обновление сразу после начала обновления местоположения. Поэтому вполне разумно ожидать, что значение lat будет равно нулю в течение нескольких секунд после начала обновления.
В-третьих, я бы посмотрел на другой контроллер (где вы пытаетесь прочитать результат). Вы находитесь в точке останова в классе, когда пытаетесь получить делегат приложения?
Кстати, архитектура вашего приложения выглядит немного (извините) ужасно. Есть ли какая-то причина, по которой вам нужно так тесно связывать делегат приложения и контроллеры? Более элегантный способ может заключаться в создании собственного синглтона управления местоположением и размещении на нем уведомлений. Любой заинтересованный класс может подписаться на эти уведомления об обновлении местоположения.