2016-07-21 14 views
1

Ich bin neu in iOS Entwicklung und ich erstelle meine erste App, so tut mir leid, wenn die Frage wirklich schlecht ist. Ich verwende die Master/Detail-Vorlage in Xcode und verwende Core Data. Ich änderte die Vorlage, um einen benutzerdefinierten Zellenstil in der TableView zu verwenden. Wenn der Benutzer etwas hinzufügen möchte, wird er auf eine andere Ansicht umgeschaltet, um ein Formular zu vervollständigen. Wenn der Benutzer auf Speichern klickt, werden die Formulardaten in Core Data gespeichert und die Ansicht wechselt zurück zum MasterView.Benutzerdefinierte Zelle ist leer, wenn sie in TableView eingefügt wird. Nicht leer, wenn die App geschlossen und wieder geöffnet wird

Mein Problem ist, dass beim Speichern des Formulars die TableView aktualisiert wird, um die neue Zelle zu zeigen, aber es ist intermittierend leer tableView. Manchmal wird das passieren, manchmal wird es nicht passieren. Die Zelle bleibt leer, bis die App vom App-Switcher geschlossen und erneut geöffnet wird.

Gibt es etwas, das ich vergesse zu ändern? Danke für die Hilfe.

Hier sind die Funktionen, die ich in der Vorlage geändert meine benutzerdefinierte Zelle Stil hinzuzufügen:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomTableViewCell 
    let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject 
    self.configureCell(cell, withObject: object) 
    return cell 
} 

func configureCell(cell: CustomTableViewCell, withObject object: NSManagedObject) { 

    let imageData: NSData = object.valueForKey("image") as! NSData 
    let picture: UIImage = UIImage(data: imageData)! 
    let date: NSDate 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.locale = NSLocale.currentLocale() 


    cell.cellImage.image = picture 
    cell.locationNameLabel!.text = object.valueForKey("name")!.description 
    cell.categoryLabel!.text = object.valueForKey("category")!.description 

    date = object.valueForKey("date")! as! NSDate 

    dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle 
    cell.dateLabel!.text = dateFormatter.stringFromDate(date) 


} 

Dies ist die einzige Funktion, die ich für die FetchedResultsController geändert

func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) { 
    switch type { 
    case .Insert: 
     tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade) 
    case .Delete: 
     tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade) 
    case .Update: 
     self.configureCell(tableView.cellForRowAtIndexPath(indexPath!)! as! CustomTableViewCell, withObject: anObject as! NSManagedObject) 
    case .Move: 
     tableView.moveRowAtIndexPath(indexPath!, toIndexPath: newIndexPath!) 
    } 
} 

Antwort

0

Ich glaube, Sie brauchen um die Daten neu zu laden, nachdem Sie die Zelle hinzugefügt haben und wenn Sie zurück in die Tabellenansicht gehen. Sie können self.tableView.reloadData() verwenden, um Ihre gesamte Tabelle neu zu laden, oder self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.None), um eine bestimmte Zelle neu zu laden. Ich hoffe, das hilft :)

+0

Danke für die Hilfe. Ich habe versucht, 'tableView.Data() 'zu verwenden, und das Problem ist immer noch da. Ich habe auch Reload-Funktionen in den ViewWillAppear und auch die ViewDidLoad Methoden platziert und sie auch nicht geholfen. –

+0

Und Sie sagten, wenn Sie die App schließen und wieder öffnen, zieht die App die richtigen Daten ein, die Sie zuvor in das Formular eingegeben hatten, und trägt sie korrekt in die Zelle ein? –

+0

Ja, wenn ich die App schließe, erscheint die Information in der Zelle. Das Seltsame ist, dass, wenn ich die App nicht schließe, ich immer noch auf die leere Zelle klicken kann, wie auf dem Bild, das ich oben gepostet habe, und es bringt mich zur korrekten Detailansicht mit den darin enthaltenen Informationen. Aus irgendeinem Grund möchte es die benutzerdefinierte Zelle nur anzeigen, bis ich schließe und wieder öffne. –