2016-04-11 9 views
0

Ich versuche zu initialisieren und dann Klassenobjekt über Delegate Func an Array anzuhängen. Delegate Double kommt vom Knopfdruck mit einigen Daten.Array stapelt nicht Klassenobjekt

var expensesArray = [SpendedMoneyObject]() 
var delegatedDouble:Double = 0.0 

func setExpenses(expensesFromMainView: Double) { 
    delegatedDouble = expensesFromMainView 
    var aSpendedMoneyObject = SpendedMoneyObject(moneySpent: delegatedDouble) 
    expensesArray += [aSpendedMoneyObject] 
    self.tableView.reloadData() 
} 

Problem hier ist, dass ich versuche, bei TableViewCell zu zeigen Array, aber es gar nicht zeigen, ich denke, Hauptproblem ist, dass expensesArray Wert 1 ist und es ist nicht stapeln, aber gleiche Array mit anderem Wert zu ersetzen . Wird wirklich glücklich sein zu hören, was du denkst.

Edit: Ich versuchte .append und es immer noch das gleiche TableView func cellForRowAtIndexPath wird nicht aufgerufen.

class ExpensesTableViewController: UITableViewController, ExpensesEnteredDelegate{ 

//MARK : Properties 
var expensesArray = [SpendedMoneyObject]() 
var delegatedDouble:Double = 0.0 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 
func setExpenses(expensesFromMainView: Double) { 

    delegatedDouble = expensesFromMainView 
    var aSpendedMoneyObject = SpendedMoneyObject(moneySpent: delegatedDouble) 
    expensesArray.append(aSpendedMoneyObject) 
    self.tableView.reloadData() 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// MARK: - Table view data source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return expensesArray.count 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cellIdentifier = "ExpensesCell" 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! ExpensesTableViewCell 
    print("Iam here") 
    let expense = expensesArray[indexPath.row] 
    let fromDoubleToString = "\(expense.moneySpent)" 

    cell.loadItemsToCell(fromDoubleToString, date: expense.date) 



    return cell 
} 

Objektklasse:

class SpendedMoneyObject { 
var moneySpent: Double 
var currentTime = NSDate().toShortTimeString() 
var date: String 

init(moneySpent: Double) { 
    self.date = currentTime 
    self.moneySpent = moneySpent 

}} 

Edit: Ich kann jetzt mehr als ein Array hinzufügen, indem Sie neue Viewcontroller Schaffung von spendButton func bewegt, die NEWVC wurde die Erstellung jedes Mal i-Taste angeklickt. Hier sind bearbeitet Code:

protocol ExpensesEnteredDelegate { 
func setExpenses(expensesFromMainView: Double) 
} 

class MainViewController: UIViewController { 

@IBOutlet weak var moneyTextField: UITextField! 



var delegate: ExpensesEnteredDelegate? = nil 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Defining ExpensesVC 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let newExpensesVC = storyboard.instantiateViewControllerWithIdentifier("ExpensesTableView") as! ExpensesTableViewController 
    delegate = newExpensesVC 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

@IBAction func spentButton(sender: AnyObject) { 


    // Delegating expenses Double value 
    if (delegate != nil) { 
     let myDouble = Double(moneyTextField.text!) 
     let expenses: Double = myDouble! 
     delegate!.setExpenses(expenses) 
    } 


}} 

Aber noch Arrays Daten nicht auf sich zeigt in einem Tableview

+2

nur eine Art Notiz: "Danke in forward" ist nicht eine reale Sache! Sie haben vielleicht eher an "Danke im Voraus" gedacht, was grammatikalisch korrekt ist - aber beachten Sie, dass es in vielen Kulturen auch als unhöflich gilt, "im Voraus" zu danken. Stellen Sie einfach Ihre Frage, Sie werden den Leuten danken, sobald sie geantwortet haben. :) – Moritz

+0

'+ =' of array ist eigentlich nur '.appendContentsOf' Methode, die die ursprüngliche nicht ersetzen sollte. Sie können überprüfen, wie oft "setExpenses" tatsächlich aufgerufen wurde und wo von. – zcui93

+0

Ich verstehe nicht, was Sie mit "es ist nicht stapeln, sondern ersetzen" meinen. Da dies ein Problem mit 'UITableView' zu sein scheint, sollten Sie diesen Code ebenfalls posten. Mehr Code == mehr Hilfe. – ryantxr

Antwort

0

diesen Code Beispiel Versuchen:

let aSpendedMoneyObject = SpendedMoneyObject(moneySpent: delegatedDouble) 
expensesArray.append(aSpendedMoneyObject) 

Oder können Sie .extend() Methode verwenden, wenn Sie schauen, um Fügen Sie weitere Elemente aus einem anderen Array zu Ihrem Array hinzu.

0

statt

expensesArray += [aSpendedMoneyObject] 

versuchen

expensesArray.append(aSpendedMoneyObject) 
Verwandte Themen