Проблемы с назначением увеличенных значений для CGPointMake

Я пытаюсь использовать следующий код для перемещения по страницам Pdf с помощью webView.

 float Y = pdfNavigateController.webView.center.y + gY;
 [pdfNavigateController.webView.scrollView setContentOffset:CGPointMake(0,Y)];

Значение gY также является числом с плавающей запятой и увеличивается по мере того, как пользователь выбирает следующую страницу. В настоящее время код выдает ошибку «Недопустимые операнды для двоичного выражения («CGFloat» (он же «плавающий») и «плавающий *»). Я предполагаю, что операнды недействительны, поскольку значение является указателем, но я не знаю, как передать увеличенное значение, не получая этой ошибки.


person user616076    schedule 30.11.2011    source источник
comment
Не могли бы вы показать нам, откуда именно берется gY или как он создается. Поскольку ошибка выглядит так, будто вы пытаетесь добавить float* (указатель с плавающей запятой) к float (CGFloat). Это предполагает, что gY на самом деле объявлен как float*.   -  person Jamie Stewart    schedule 30.11.2011
comment
Что такое gY в вашем коде? Где заявлено?   -  person Rafa de King    schedule 30.11.2011
comment
gY объявляется как static float *gY = 0 в верхней части страницы под объявлениями вместе со всеми другими глобальными переменными. Он увеличивается до того, как достигнет кода, который вы видите выше. Идея состоит в том, что приведенный выше код запускается после каждого нажатия кнопки «Далее» для перехода к следующей странице. Это код выше, который вызывает проблемы, поскольку он не принимает gY в качестве переменной.   -  person user616076    schedule 30.11.2011


Ответы (3)


Если gY является указателем (на число с плавающей запятой), вам необходимо разыменовать его, чтобы получить доступ к его значению:

float Y = pdfNavigateController.webView.center.y + *gY;

ИЗМЕНИТЬ

Убедитесь, что у вас есть действительный указатель (т. е. gY указывает на фактическое число с плавающей запятой). Если это неинициализированный указатель, он не будет работать.

Не могли бы вы рассказать нам, как вы получаете gY?

ИЗМЕНИТЬ 2

Я видел, как вы сказали, что gY объявляется как:

static float *gY = 0;

Это указатель NULL.
И вы не можете разыменовать указатель NULL.

Когда вы увеличиваете его, вы увеличиваете указатель (адрес памяти), а не значение. Так что ваш указатель на самом деле указывает на мусор.

Почему вы используете указатель? Вы должны использовать:

static float gY = 0;
person Macmade    schedule 30.11.2011
comment
Как и выше, код зависает в этой строке, даже если я оборачиваю его обработчиком исключений. - person user616076; 30.11.2011
comment
Спасибо, теперь все работает, я очень ценю ваши комментарии, глупая ошибка со ссылкой на указатель NULL, но рад, что вы указали на это. - person user616076; 30.11.2011

если gY является указателем на число с плавающей запятой, используйте *gY:

float Y = pdfNavigateController.webView.center.y + *gY;

Сообщение об ошибке: ('CGFloat' (aka 'float') and 'float *') говорит о том, что CGFloat ожидал float, но получил указатель с плавающей запятой: float *

Для отладки сначала разбейте операцию на доступ к указанному значению.

float gYValue = *gY;
float Y = pdfNavigateController.webView.center.y + gYValue;
person zaph    schedule 30.11.2011
comment
Приведенный выше код компилируется нормально, но зависает на строке float gYValue = *gY; - person user616076; 30.11.2011

Трудно устранить неполадки, поскольку вы разместили очень небольшой объем своего кода. Однако у меня есть идея. Если gX является аргументом метода, решение может быть следующим:

Чтобы решить эту проблему, добавьте объявление метода в файл .h для вашего класса. Надеюсь, это поможет - если нет, пожалуйста, опубликуйте еще немного кода.

person Rafa de King    schedule 30.11.2011