Перейти к содержанию
Fire Monkey от А до Я
  • 0

[XE8] [iOS] Не запускается приложение с FMX.DateTimeCtrls


#WAMACO

Вопрос

Здравствуйте!

Очень странное поведение.

Есть пустая форма. На ней один TButton и Tlabel.

Все запускается по Windows, MacOS, Android и iOS!

НО СТОИТ НА ФОРМУ ДОБАВИТЬ TDateEdit - то запускается везде, кроме iOS!!!! (под iOS запускаю на iOSSimulator)

Убираешь TDateEdit, такая же ситуация. Экспериментальным путем убрал из USES  FMX.DateTimeCtrls - ВСЕ ОПЯТЬ РАБОТАЕТ ПОД iOS!

 

Попробуйте кто-нибудь так сделать! У всех так? или у меня глюк какой-то?

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

был у меня глюк с этим компонентом, при добавлении двух компонентов на разных формах все время вылетала ошибка, после правки заработало. изменения - в процедуре TCustomDateTimeEdit.DoCheckChanged заменить 

IsChecked := FCheck.IsChecked;

на 

if HasCheckBox then
    IsChecked := FCheck.IsChecked;
Ссылка на комментарий
  • 0
  • Администраторы

Haword,

 

Я не знаю, в какой версии у вас такая проблема. Но обработчик DoCheckChanged в принципе не должен вызывать, если нету элемента стиля FCheck. Потому что, он вешается на FCheck.OnChanged.

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

  1. Когда контрол скрывается, он выгружает стиль и помешает его во временный кеш.
  2. Затем при появлении он вначале запрашивае стиль из кеша
  3. Если стиль есть в кеше, то восстанавливает
  4. Если стиля нет, загружает новый.

Поэтому, у вас по сути при открытии второй формы с вторым DateEdit, второй TDateEdit берет стиль первого. В принципе тогда может вызваться обработчик DoCheckChanged первого контрола, вместо второго. Однако в XE8 такого поведения не наблюдается. (XE7 нету под рукой)

 

Однако, нужно убедиться, что в FreeStyle идет сброс этого обработчика с FCheck:

procedure TCustomDateTimeEdit.FreeStyle;
begin
  if HasTextObject then
    TextObject.OnPaint := nil;
  if HasCheckBox then
    FCheck.OnChange := nil; // <-- сброс обработчика
  FCheck := nil;
  if HasClearButton then
    FClearButton.OnClick := nil;
  FClearButton := nil;
  inherited;
end;
Ссылка на комментарий
  • 0
  • Администраторы

На счет первоначально описанной проблемы, не могу сказать, так как у меня все запускается на всех платформах (я использую XE8).

 

Какую версию iOS и SDK используете?

Ссылка на комментарий
  • 0

На счет первоначально описанной проблемы, не могу сказать, так как у меня все запускается на всех платформах (я использую XE8).

 

Какую версию iOS и SDK используете?

iOS - 8.3

SDK - iPhoneSimulator8.3

 

Повторю еще раз - убираю из USES формы FMX.DateTimeCtrls - ВСЕ РАБОТАЕТ!

Стоит добавить  FMX.DateTimeCtrls (даже без контрола TDateTime на форме) - ЗАПУСКАЕТСЯ и тут же закрывается!

Ссылка на комментарий
  • 0

Подтверждаю проблему! Но с одной коррекцией, на iPhoneSimulator как и описал wamaco действительно один в один - не запускается, а вот на живом устройстве (iPhone 5s) не удалось воспроизвести проблему - все устанавливается и работает! Так что глюк с симулятором!

Изменено пользователем Vitaldj
Ссылка на комментарий
  • 0

Brovin Yaroslav да на XE7 и был такой глюк. на 8 не пробовал еще пока.

 

да я глянул нету в файле этого обработчика

if HasCheckBox then
  FCheck.OnChange := nil; // <-- сброс обработчика
Изменено пользователем Brovin Yaroslav
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...