gpt4 book ai didi

ios - 使用 Core Data Swift 对 TableView 和行进行分段

转载 作者:搜寻专家 更新时间:2023-10-31 21:53:55 24 4
gpt4 key购买 nike

我在 sqlite 中有两个表:

代码由 XCode Generation 生成:

class Event: NSManagedObject {

@NSManaged var startDate: NSDate
@NSManaged var details: EventDetail //i think this property shoud be var details Array<EventDetail> am i correct?
}

class EventDetail: NSManagedObject {

@NSManaged var title: String
@NSManaged var location: String
@NSManaged var note: String
@NSManaged var endDate: NSDate
@NSManaged var event: NSManagedObject
}

我想将事件放在 section 中,将 eventDetails 放在 rows 中。

我创建了加载事件的方法:

var eventList : Array<AnyObject> = []

func loadEvents(){
let appDel : AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let moc: NSManagedObjectContext = appDel.managedObjectContext!
let eventMO = NSFetchRequest(entityName: "Event")
eventMO.returnsObjectsAsFaults = false

var err : NSErrorPointer = nil
eventList = moc.executeFetchRequest(eventMO, error: err)!
self.tblEvento.reloadData()
}

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

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//return (eventList[section] as Event).details.count
return //????? what can i put here
}

我不知道我可以在方法 numbertOfRowsInSection 中放入什么来定义该部分的行数。因为我无法访问 details.count 或类似的内容。

我认为还有其他方法可以做到这一点。我看到一些东西使用 NSFetchedResultsController 但没有成功。

我希望得到一些帮助。

最佳答案

只是一个提示:如果您正在使用 CoreData 和 UiTableView,请使用 NSFetchedResultsController 使事情变得非常非常容易。如果您正在寻找起点和示例代码 - 只需在 Xcode 中创建一个新的主从应用程序项目并在对话框中打开“使用核心数据”。

现在,直接回答您的问题:NSFetchResultsController 的“实现”示例:

var fetchedResultsController: NSFetchedResultsController {

  if _fetchedResultsController != nil {
return _fetchedResultsController!
}
let fetchRequest = NSFetchRequest()
// Edit the entity name as appropriate.
let entity = NSEntityDescription.entityForName("Event", inManagedObjectContext: self.managedObjectContext!)
fetchRequest.entity = entity

// Set the batch size to a suitable number.
fetchRequest.fetchBatchSize = 20

// Edit the sort key as appropriate.
let sectionSortDescriptor = NSSortDescriptor(key: "startDate", ascending: true)
let secondSortDescriptor = NSSortDescriptor(key: "title", ascending: true)

let sortDescriptors = [sectionSortDescriptor, secondSortDescriptor]

fetchRequest.sortDescriptors = sortDescriptors

// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "startDate", cacheName: nil)
aFetchedResultsController.delegate = self
_fetchedResultsController = aFetchedResultsController

var error: NSError? = nil
if !_fetchedResultsController!.performFetch(&error) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
//println("Unresolved error \(error), \(error.userInfo)")
abort()
}

return _fetchedResultsController!
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return self.fetchedResultsController.sections?.count ?? 0
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let sectionInfo = self.fetchedResultsController.sections![section] as NSFetchedResultsSectionInfo
return sectionInfo.numberOfObjects
}

关于ios - 使用 Core Data Swift 对 TableView 和行进行分段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25852948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com