2015-10-03 25 views
2

我的數據模型很簡單,就像一個普通的詞典:CoreData實體部分來的UITableView

enter image description here

的字母是英文字母,單詞是詞典的詞彙和定義。我的目標是在UITableView中顯示數據,其中Letter是部分和下面的單詞。

我的代碼:

var fetchedResultsController: NSFetchedResultsController! 

override func viewDidLoad() { 
    super.viewDidLoad() 


    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    let context: NSManagedObjectContext = appDel.managedObjectContext 

    let fetchRequest = NSFetchRequest(entityName: "Letter") 

    let letterSort = 
    NSSortDescriptor(key: "letterName", ascending: true) 
    fetchRequest.sortDescriptors = [letterSort] 

    fetchedResultsController = 
     NSFetchedResultsController(fetchRequest: fetchRequest, 
      managedObjectContext: context, 
      sectionNameKeyPath: "letterName", 
      cacheName: "dict") 

    fetchedResultsController.delegate = self 

    do { 
     try fetchedResultsController.performFetch() 
    } catch let error as NSError { 
     print("Error: \(error.localizedDescription)") 
    } 
} 


func numberOfSectionsInTableView 
    (tableView: UITableView) -> Int { 
     return fetchedResultsController.sections!.count 
} 

func tableView(tableView: UITableView, 
    titleForHeaderInSection section: Int) -> String? { 
     let sectionInfo = 
     fetchedResultsController.sections![section] 
     return sectionInfo.name 
} 
func tableView(tableView: UITableView, 
    numberOfRowsInSection section: Int) -> Int { 
     let sectionInfo = 
     fetchedResultsController.sections![section] 
     print(sectionInfo.numberOfObjects) 
     return sectionInfo.numberOfObjects 
} 

我從一個教程得知這個代碼。它似乎工作。節號等於26,每個標題是一個通過z。

問題是如何獲取某一節中的行數,以及如何引用數據以將它們放入一行中?

回答

2

我不認爲這段代碼會做你想做的。通常,用於構建填充UITableViewUICollectionViewNSFetchedResultsControllerNSFetchRequest必須獲取您實際想要顯示的實體類型(或事情變得複雜)。你有沒有嘗試過這樣的事情?

let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
let context: NSManagedObjectContext = appDel.managedObjectContext 

let fetchRequest = NSFetchRequest(entityName: "Word") 

let letterSort = 
NSSortDescriptor(key: "letter.letterName", ascending: true) 
let wordSort = NSSortDescriptor(key: "word", ascending: true) 
fetchRequest.sortDescriptors = [letterSort, wordSort] 

fetchedResultsController = 
    NSFetchedResultsController(fetchRequest: fetchRequest, 
     managedObjectContext: context, 
     sectionNameKeyPath: "letter.letterName", 
     cacheName: "dict") 

fetchedResultsController.delegate = self 

do { 
    try fetchedResultsController.performFetch() 
} catch let error as NSError { 
    print("Error: \(error.localizedDescription)") 
} 

假設你的單詞值和關聯的字母是正確的,我認爲這應該做你想做的。還值得注意的是,cacheName在您的應用程序中必須是唯一的,所以您可能需要比簡單"dict"更復雜的東西。

+0

這看起來差不多正確,但是您必須添加與sectionNameKeyPath對應的*第一個排序描述符*。 –

+0

如果排序順序不受影響,則不必明確指定。因此,我對字詞值和相關字母的假設。然而,你的建議會使它更加正確,我會更新這個例子。 –

+0

你說得對,排序是​​一樣的。 –