2014-12-08 3 views
-1

Поэтому у меня есть один класс:Неправильные значения массива при доступе к массиву из другого класса?

class FoodListTable: UITableViewController 

Одно свойства я устанавливаю этот класс массив:

var calorieNumberArray = [0,0,0,0,0,0,0,0,0] 

Причина у меня есть этот массив для различных значений на основе, если бы ряд (s) выбрано/(с использованием типа доступности TableView Checkmark). Я сделал несколько тестов, и когда выбрана строка (строки), значения массива меняются правильно. У меня также есть переменная, которая находит сумму значений в calorieNumberArray:

var calorieTotal: Float { 
    return calorieNumberArray.reduce(0 as Float) { $0 + Float($1) } 
} 

У меня также есть еще один класс:

class Menu: Calculator // Calculator class is of type UIViewController 

I переход от FoodListTable класса к Menu класса с помощью навигационной панели. В методе ViewDidLoad класса menu, я пытаюсь получить доступ к значениям calorieNumberArray и calorieTotal:

override func viewDidLoad() { 
     let foodListTableAccess = FoodListTable() 
     println(foodListTableAccess.calorieNumberArray) 
     println(foodListTableAccess.calorieTotal) 

И это то, что отображается в консоли:

[0, 0, 0, 0, 0, 0, 0, 0, 0] // calorieNumberArray 
0.0 // calorieTotal 

Как я могу получить доступ класс FoodListTable правильно из класса Menu, чтобы значения calorieNumberArray и calorieTotal остались прежними и не сбрасывались в исходное значение? Спасибо!

+0

Вы создаете новый экземпляр класса FoodListTable. Вам нужно передать ссылку на существующий экземпляр. См. Http://stackoverflow.com/questions/26662256/how-to-pass-data-from-one-view-controller-to-the-other-swift, например – Paulw11

+0

Я прочитал этот вопрос и ответ, и я добрый понять, как я могу передать переменную. Если возможно, можно ли каким-либо образом создать ответ о том, как передать эту переменную в этом сценарии? Я новичок в программировании, поэтому многие части другого ответа смущают меня. Спасибо @ Paulw11 – TheCentral

+0

Когда вы говорите, что вы переходите между ними с помощью строки меню, вы собираетесь «вернуться» в класс «Меню» или вперед? – Paulw11

ответ

1

Функция viewDidLoad в классе Menu создает экземпляр нового экземпляра FoodListTable, а переменные в этом новом экземпляре будут иметь свои инициализированные значения. Вам нужно передать ссылку на существующий экземпляр. Вы можете сделать это в prepareForSegue в FoodListTable.

Во-первых, в вашем Menu классе, добавить новое свойство типа FoodListTable? получить ссылку, а затем в FoodListTable добавить следующее -

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "yourSegueName" { // Change to suit the name of the segue between the two 

     let menu = segue.destinationViewController as Menu 
     menu.foodListTable=self; 
    } 
} 

Сейчас в вашем случае меню вы можете просто получить доступ к self.foodListTable.

Из объектно-ориентированного дизайна было бы лучше создать объект модели данных и создать экземпляр этого объекта в FoodTableViewController, а затем передать этот объект, а не сам контроллер представления - таким образом вы будете развязывать свою модель 'from your' view controller '

Смежные вопросы