【发布时间】:2015-02-22 13:55:45
【问题描述】:
我目前正在学习 iOS 开发课程。作为作业的一部分,我的任务是使用 Swift 中的 Core Data 在笔记跟踪项目中创建一个UISearchController。
我发现的每个示例都在 Objective-C 中,或者正在过滤静态数组。 Apple 的“示例”代码于 2014 年 12 月更新,无法在 Xcode 6.3 中编译。
要添加UISearchController,我有3 个主要任务要做:
1) 创建一个视图控制器来呈现搜索结果。我正在使用 TableViewController。
2) 创建一个 UISearchController,并将其传递给我的搜索结果视图控制器。
现在让我“难过”的是获取 managedObjectsContext 中的对象。在尝试添加 UISearchController 之前,我的应用程序运行良好。我可以添加、编辑和删除项目。我将 Xcode 6.3 中的“罐装”核心数据代码与 AppDelegate 中的堆栈一起使用。
class MasterViewController: UITableViewController, NSFetchedResultsControllerDelegate
var searchController: UISearchController? = nil
func addSearchBar() {
var resultsController = SearchResultsTableViewController()
resultsController.notes = // stumped what to call the notes. Trying to call an array from the Notes class below
resultsController.delegate = self
searchController = UISearchController(searchResultsController: resultsController)
searchController!.searchResultsUpdater = resultsController
searchController!.searchBar.frame = CGRect(
x: searchController!.searchBar.frame.origin.x,
y: searchController!.searchBar.frame.origin.y, width: searchController!.searchBar.frame.size.width, height: 44.0)
tableView.tableHeaderView = searchController!.searchBar
self.definesPresentationContext = true
}
3) 当搜索文本发生变化时,UISearchController 会通知它的 searchResultsUpdater(一个符合 UISearchResultsUpdating 的类)。我正在使用我的搜索结果视图控制器实现此协议,以便我可以更新过滤结果。
下面是我的Note: NSManagedObject类:
import Foundation
import CoreData
class Note: NSManagedObject {
@NSManaged var dateCreated: NSDate
@NSManaged var dateEdited: NSDate
@NSManaged var noteTitle: String
@NSManaged var noteBody: String
// TODO: adding this to make it easier to handle names
class func notes() -> NSArray {
let whereMyNotesAreStored = // Need syntax for where my MyManagedObjectContext is located
let dataArray = NSArray(contentsOfFile: whereMyNotesAreStored!)
var notesArray = NSMutableArray()
for dictionary in dataArray {
var note = Note()
note.noteTitle = dictionary["noteTitle"] as! String
note.noteBody = dictionary["noteBody"] as! String
note.dateCreated = dictionary["dateCreated"] as! String
note.dateEdited = dictionary["dateEdited"] as! String
notesArray.addObject(note)
}
return NSArray(array: notesArray as! [AnyObject])
}
}
【问题讨论】:
标签: ios core-data nsmanagedobject nsmanagedobjectcontext