2013-09-09 5 views
0

Я делаю сегмент калькулятора химии в приложении, над которым я работаю, и я не могу получить данные, и я не могу получить информацию, чтобы правильно заполнить экран. Есть второстепенная проблема, выравнивание, и если кто-то может мне помочь, я бы очень признателен, но это не основное внимание в этом вопросе - я сделаю для вас специальную тему.Данные из DetailViewController не отображаются

Итак, я перейду к тому, что хочу, и что я пробовал. Я пытаюсь сделать калькулятор химии, в зависимости от того, какое уравнение выбрано, UIStepper max/min.Value изменен, чтобы включить все возможные определения этого уравнения, а также определенные UILabels и UITextFields, показанные/скрытые.

Я подтвердил, что у меня есть данные, переданные из MasterViewController, поскольку я установил данные в NSString с именем _equation и успешно использовал _equation, чтобы изменить заголовок DetailViewController под self.title в viewDidLoad.

Я попытался разместить и инициализировать все свойства UIStepper соответствующим образом под гнездом if/if else под viewDidLoad (который также квантует возможные значения _equationName для целого числа (eqNum), чтобы он мог использоваться в инструкции switch). Я также попытался помещать скрытые свойства UITextField в viewDidLoad, но безрезультатно.

Так что без дальнейших церемоний, давайте перейдем к коду. Я усеченный код к одному уравнению, так что вы можете увидеть, что происходит здесь проще - обратите внимание, что это вложен под IBAction для кнопки Calculate:

// Take _equationName quantization and use it in a switch case to determine the formula that IBAction will use: 
if (dflt) 
{ 
    switch (eqNum) 
    { 
     case 1: 
      if ((stepper.value = 1)) 
      { 
       // Change deriv_units appropriately: 
       deriv_units.text = @"Energy (Joules)"; 
       // This is a Planck's constant calculation, we hide the second variable as the constant 
       // is stored: 
       value2.hidden = YES; 
       value2_type.hidden = YES; 
       // Now we set up the parameters of the first entry variable: 
       value1_type.text = @"Frequency (in Hz)"; 
       double frequency = [value1.text doubleValue]; 
       double Planck = 6.626069e-34; 
       double energy = Planck * frequency; 
       // Now we set up the return field to return results: 
       NSString* resultIntermediate = [NSString stringWithFormat:@"%f", energy]; 
       result.text = resultIntermediate; 
       units.text = @"J"; 
      } 

и последующего кода под viewDidLoad:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [self configureView]; 
    self.title = _equationName; 
int eqNum; 
if ((_equationName = @"Energy-Frequency Relation")) 
{ 
    eqNum = 1; 
    // Set stepper bounds for derivation: 
    [stepper setMinimumValue:1]; 
    [stepper setMaximumValue:3]; 
    self.stepper.stepValue = 1; 
    self.stepper.wraps = NO; 
    self.stepper.autorepeat = NO; 
    self.stepper.continuous = YES; 
    // This is primarily a two-variable equation, so hide UITextView and UILabel #3: 
    value3.hidden = YES; 
    value3_type.hidden = YES; 
} 

(Реквизит для тех, кто признает это - это отношение Планка: D)

Вот что графический интерфейс должен выглядеть (как он появляется в раскадровку): enter image description here

Вот что он выходит глядя, как в IOS Simulator: enter image description here

Обратите внимание на выпуск перекос, который не является принципиальным вопросом в игре здесь. Также обратите внимание, что прямо сейчас оператор switch для параметров уравнения находится под , если дерево, которое проверяет, возвращает ли dflt (логическая переменная, присвоенная UISwitch) true для вычислений с двойной точностью. Однако при включении переключателя проблема не исправляется.

Вот еще более полное объяснение:

  • значение # .text это число вошел в одну из трех UITextFields, от верха до низа.
  • value # _type - текст, который будет отображаться в соответствующей UILabel.
  • deriv_units - это UILabel под символом «Деривационные единицы» и используется для отображения того, какой вывод уравнения был выбран с использованием UIStepper.
  • Внизу: самый правый UILabel - это результат , а самый левый - единиц.

Большое спасибо всем, кто может помочь этому начинающуюся проявитель по пути праведности программирования.

+0

Попробуйте использовать контрольные точки, чтобы убедиться, что ваши кнопки и переключатели выполняют то, что вы ожидаете от них. – Joride

ответ

0

О вашей проблеме выравнивания: похоже, что вы создаете раскадровку для 4-дюймового экрана при работе на 3,5-дюймовом экране. В раскадровке внизу справа есть несколько маленьких кнопок, одна из которых позволяет вам мгновенно переключаться между дисплеем для 4 "или 3,5".

Вы уверены, что ваши элементы управления подключены к вашему коду?

+0

Отлично; исправлено! Я предполагаю, что это разница между размерами экрана 3/3GS/4/4S и iPhone 5. Любые идеи по основному вопросу? – ecfedele

+0

Вы подключили элементы управления к вашему коду? – Joride

+0

Да (если бы это было, я бы склонил голову и сбежал от стыда). Теперь, когда я думаю об этом, есть вероятность, что я мог ошибочно подключить UISwitch или UIStepper к IBOutlet, что, очевидно, не сделает утверждение _dflt_ истинным и что-либо сделает. Позвольте мне проверить это; Я буду держать вас в курсе. – ecfedele

0
- (void) viewDidAppear: (BOOL) animated{ 
    [super viewDidAppear: animated]; 
    // some rude NSAsserts, but let's be sure 
    NSAssert(value1_type != nil, @"Your control element is nil, it might not be hooked up"); 
    // you should now see this text in the textfield 
    value1_type.text = @"Frequency (in Hz)"; 

    NSAssert(result != nil, @"Your control element is nil, it might not be hooked up"); 
    result.text = @"some test text"; 

    NSAssert(units != nil, @"Your control element is nil, it might not be hooked up"); 
    units.text = @"J"; 
} 
+0

Как вы объявляете селектор? Это бросает меня «Нет видимого @interface для UIViewController объявляет селектор« viewDidAppear » – ecfedele

+0

Извините, я допустил ошибку в имени метода. – Joride

+0

Я добавил его, и это дает мне две вещи: предупреждение в объявлении функции, сообщающее мне, что есть конфликтный возврат «void vs. id», во-вторых, при моделировании, когда я вхожу в DetailViewController, он выдает ошибку. Это, похоже, не похоже на первый NSAssert в частности. – ecfedele