請原諒如果這是一個重複的問題。我儘可能徹底地搜索,但是我在UITableView中看到的有關核心數據的其他任何問題似乎完全符合我所要做的。需要幫助在Swift中的UITableView中顯示核心數據
基本上,我在我的核心數據兩個「表」:
cstProjects和plProjects
兩個表具有所謂的「propertyOwner」和「屬性ID」(等等)的屬性,被設置成字符串。
接下來,在一個ViewController中,我有一個表視圖實例,樣式設置爲Subtitle,並將單元格標識設置爲「projectCell」。
因爲我在覈心數據中有兩個表,所以我將表初始化爲有兩個部分。我希望第一部分顯示cstProjects表中的所有項目,第二部分顯示plProjects表中的所有項目。
這是我的ViewController代碼到目前爲止。我已經發表了評論,盡我所能對其進行解釋。我創建的函數可能有點矯枉過正,可以確定每個部分應該有多少「行」,但我不知道更簡單的方法。
在下面的代碼中,您看到雙重問號「??」是我不知道該放什麼東西來展示當前我們正在迭代的項目類型的當前「行」。儘管如此,如果我不得不盡可能簡化我的問題,我只需要知道如何在UITableView中顯示核心數據表的行。
import UIKit
import CoreData
class LoadProjectViewController: UIViewController, UITableViewDataSource, NSFetchedResultsControllerDelegate {
let projectSectionCount: Int = 2
let cstSection: Int = 0
let plSection: Int = 1
// Implement UITableViewDataSource methods
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return projectSectionCount
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch(section) {
case cstSection:
return getCSTProjects()
case plSection:
return getPLProjects()
default:
return 0
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("projectCell")! as UITableViewCell
switch (indexPath.section) {
case cstSection:
//this is where I need to set the property owner for the CST Project
cell.textLabel!.text = ??
//this is where I need to set the project ID for the CST Project
cell.detailTextLabel!.text = ??
case plSection:
//this is where I need to set the property owner for the PL Project
cell.textLabel!.text = ??
//this is where I need to set the project ID for the PL Project
cell.detailTextLabel!.text = ??
default:
cell.textLabel!.text = "Unknown"
}
return cell
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
switch section {
case cstSection:
return "Standing Timber Projects"
case plSection:
return "Purchased Logs"
default:
return "Unknown"
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func getCSTProjects() -> Int {
let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
let context: NSManagedObjectContext = appDel.managedObjectContext
let request = NSFetchRequest(entityName: "CSTProjects")
var results = [AnyObject]()
request.returnsObjectsAsFaults = false
do {
results = try context.executeFetchRequest(request)
} catch let error {
print("There was an error loading the data. \(error)")
}
if (results.count > 0) {
return results.count
} else {
return 0
}
}
func getPLProjects() -> Int {
let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
let context: NSManagedObjectContext = appDel.managedObjectContext
let request = NSFetchRequest(entityName: "PLProjects")
var results = [AnyObject]()
request.returnsObjectsAsFaults = false
do {
results = try context.executeFetchRequest(request)
} catch let error {
print("There was an error loading the data. \(error)")
}
if (results.count > 0) {
return results.count
} else {
return 0
}
}
}