2016-09-27 49 views
0

更新:如何顯示不同大小的2個不同原型單元格

我走了一條不同的路線。繼承人我想做什麼。設計我的應用程序,讓我保存核心數據並在tableview中的另一個控制檯中查看它。一旦進入tableview控制檯,我也可以在控制檯的頂部看到一個圖表。

我做了什麼:

我創建了一個UIViewController,拖過一個imageview的只是使用它作爲一個例子。我也拖入桌面視圖,單元格等等。

我的問題:

我可以查看空白的tableview細胞和看到樣品圖像。一旦我保存核心數據並返回來嘗試查看數據,就會出現錯誤。我有數據源和委託實現,但是,我需要把它放在我的代碼中。

class ViewMealsViewController: UIViewController, NSFetchedResultsControllerDelegate { 


    @IBOutlet weak var tableView: UITableView! 
    @IBOutlet weak var menuButton: UIBarButtonItem! 

    let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext 

    var fetchedResultController: NSFetchedResultsController<MealStats> = NSFetchedResultsController() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     fetchedResultController = getFetchedResultController() 
     fetchedResultController.delegate = self 
     do { 
      try fetchedResultController.performFetch() 
     } catch _ { 
     } 


     if revealViewController() != nil { 
      revealViewController().rearViewRevealWidth = 325 
      menuButton.target = revealViewController() 
      menuButton.action = #selector(SWRevealViewController.revealToggle(_:)) 

      view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 
     } 
    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 


    // MARK:- Retrieve Stats 
    func getFetchedResultController() -> NSFetchedResultsController<MealStats> { 
     fetchedResultController = NSFetchedResultsController(fetchRequest: taskFetchRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) 
     return fetchedResultController 
    } 

    func taskFetchRequest() -> NSFetchRequest<MealStats> { 
     let fetchRequest = NSFetchRequest<MealStats> (entityName: "MealStats") 
     let timeSortDescriptor = NSSortDescriptor(key: "mealtype", 
                ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:))) 
     let milesSortDescriptor = NSSortDescriptor(key: "mealname", 
                ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:))) 

     fetchRequest.sortDescriptors = [timeSortDescriptor, milesSortDescriptor] 

     return fetchRequest 
    } 


    // MARK: - TableView data source 
    func numberOfSections(in tableView: UITableView) -> Int { 
     let numberOfSections = fetchedResultController.sections?.count 
     return numberOfSections! 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     let numberOfRowsInSection = fetchedResultController.sections?[section].numberOfObjects 
     return numberOfRowsInSection! 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
     let mealstats = fetchedResultController.object(at: indexPath) as! MealStats 
     cell.textLabel?.text = mealstats.mealtype 
     cell.detailTextLabel!.text = mealstats.mealname 


     return cell 
    } 

    // MARK: - TableView Deleteƒ 

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
     let managedObject:NSManagedObject = fetchedResultController.object(at: indexPath) as! NSManagedObject 
     managedObjectContext.delete(managedObject) 
     do { 
      try managedObjectContext.save() 
     } catch _ { 
     } 
    } 

    // MARK: - TableView Refresh 

    func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) { 
     tableView.reloadData() 

    } 


} 

UIViewController with a sample image for an example

Error I get once I try to view saved core data in the tableview

+0

是的,您可以使用UITableViewController或UIViewController與表視圖。您使用適當的重用標識符使單元出隊。確保你實現了'heightForRowAtIndexPath' – Paulw11

+0

讓它工作? –

+0

不,但我做了項目的更改,並與UIViewController而不是UITableViewController – rahmikg

回答

0

使用的UITableViewController

兩個不同的單元添加到故事板上的tableview,

設置兩個唯一標識符爲他們即

細胞第1號識別符號:iden_1 細胞第2號標識符:iden_2

然後在類

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

let cell 
if(condition) 
{ 
    cell = tableView.dequeueReusableCell(withIdentifier: "iden_1", for: indexPath) 
    let stats = fetchedResultController.object(at: indexPath) as! Stats 
    cell.textLabel?.text = stats.type 
    cell.detailTextLabel!.text = stats.name 
} 
else{ 
    cell = tableView.dequeueReusableCell(withIdentifier: "iden_2", for: indexPath) 
    let stats = fetchedResultController.object(at: indexPath) as! Stats 
    cell.textLabel?.text = stats.type 
    cell.detailTextLabel!.text = stats.name 
} 


return cell 
} 

,並使用該用於識別兩個小區的高度。

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
if(condition) 
    return 100 
return 200 
} 
+0

我解決了我的問題。我不得不添加UITableViewDelegate和UITableViewDataSource,即使我將tableview的連接插口拖到視圖中。感謝那些試圖幫助的人。 – rahmikg

相關問題