2016-09-27 2 views
0

업데이트 :서로 다른 크기의 2 가지 프로토 타입 셀을 표시하는 방법

다른 경로로갔습니다. 내가하고 싶은 일이있다. 핵심 데이터를 저장하고 tableview의 다른 콘솔에서 볼 수있게 해주는 앱을 디자인하십시오. 일단 tableview 콘솔에, 나는 또한뿐만 아니라 콘솔의 상단에 차트를 볼 수 있습니다.

내가 무슨 짓을 :

는 I는의 UIViewController를 만들어 단지 예로서 그것을 사용하는 이미지 뷰를 통해 드래그. 나는 또한 테이블 뷰, 셀 ... 등을 끌었다.

내 문제 :

나는 빈의 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를 테이블보기와 함께 사용할 수 있습니다. 적절한 재사용 식별자를 사용하여 셀을 dequeue합니다. 'heightForRowAtIndexPath'를 구현했는지 확인하십시오. – Paulw11

+0

이 제대로 작동합니까? –

+0

아니,하지만 프로젝트를 변경하고 UITableViewController 대신 UIViewController 함께 갔다 – 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

내 문제가 해결되었습니다. 내가보기에 tableview의 연결 콘센트를 드래그하더라도 UITableViewDelegate 및 UITableViewDataSource를 추가해야했습니다. 도움을 주려고하는 사람들에게 감사드립니다. – rahmikg