Как получить доступ к переменной из другого класса в target c

У меня есть широта и долгота, сохраненные в двух разных переменных типа double в классе 1, которые я получил, взяв координаты из упавшей булавки на карте.

Затем у меня есть другой class2, где я вычисляю время захода и восхода солнца, используя текущее время и координаты.

Затем в классе 3 я создаю экземпляр метода класса 2, который вычисляет для меня время. У меня нет проблем с использованием этого, когда используемые широта и долгота являются одним из текущего местоположения пользователя с использованием служб определения местоположения, но когда дело доходит до указания, что мне нужны координаты, сохраненные в этих переменных class1, он продолжает возвращать 0,0000 для обеих координат.

Итак, как мне сообщить моему классу 3, что я хочу использовать двойники, сохраненные в классе 1? Я предполагаю, что это что-то вроде:

Class1 *instance = [[Class1 alloc] init];

instance.savedLatitude = myNewLat;

но это инициализирует myNewLat до 0,000, и мне нужно, чтобы они были захвачены с ранее сброшенной булавки.

Спасибо!


person Community    schedule 22.02.2015    source источник


Ответы (2)


Есть больше вещей, чтобы сделать это правильно.

1) В классе 1 импортируйте основную структуру местоположения. @импорт основного местоположения;

2) В классе 1 объявите свойство, называемое, скажем, "координаты"

@property (неатомарное, присваиваемое) координаты CLLocationCoordinate2D;

Обратите внимание, что это свойство представляет собой структурный тип данных (поэтому нет звездочки-указателя *), но именно его следует использовать для координат, нет смысла заново изобретать колесо, если у вас нет колеса получше. Если у вас есть экземпляр класса 1, убедитесь, что вы правильно сохранили координаты в свойстве.

3) Если вы хотите получить доступ к координатам некоторого экземпляра class1, вам необходимо иметь ссылку на этот конкретный экземпляр. Что ты здесь делаешь

Class1 *instance = [[Class1 alloc] init];
instance.savedLatitude = myNewLat;

вы создаете новый экземпляр, координаты которого равны нулю, потому что это новый экземпляр, и именно так он инициализируется по умолчанию. Вы можете получить ссылку на этот конкретный экземпляр класса class1, передав его другим объектам с помощью некоторого метода конфигурации или некоторого пользовательского инициализатора.

Вам необходимо понимать разницу между классом как абстрактным планом/рецептом и конкретным экземпляром(ами) класса. Конечно, вы получаете ноль для координат, когда это НЕ экземпляр с координатами, которые вы ожидали. Он другой, новый.

Также не путайте переменные экземпляра и геттеры и сервер для свойств. Переменные экземпляра по соглашению являются внутренними для экземпляра, свойства являются для них общедоступным интерфейсом (обычно).

person Earl Grey    schedule 22.02.2015

Это мой самый первый пост, поэтому, пожалуйста, будьте со мной помягче :) Я опытный старый мальчик, «прогрессивный» программист на C, и только недавно начал изучать программирование OOPS, используя JAVA, но я надеюсь, что мой комментарий поможет.

Если вы можете передать экземпляр Class1 в Class3, настройте геттеры/сеттеры в Class1, тогда Class3 просто «получит» значения широты/долготы из Class1.

Не уверен, что это точно относится к цели C, но я подозреваю, что причина этого может быть тем, что вы ищете?

person Dan    schedule 22.02.2015
comment
Я действительно ищу эквивалент метода get в Java, я думаю, но я думал, что способ сделать это - создать этот экземпляр класса, а затем вызвать эти переменные, но когда я назначаю это новой переменной, я получаю 0, поэтому Я, очевидно, не правильно получаю значения - person ; 22.02.2015