Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift核心数据项目中实现UISearchController_Ios_Core Data_Nsmanagedobject_Nsmanagedobjectcontext - Fatal编程技术网

Ios 在Swift核心数据项目中实现UISearchController

Ios 在Swift核心数据项目中实现UISearchController,ios,core-data,nsmanagedobject,nsmanagedobjectcontext,Ios,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,我目前正在学习iOS开发课程。作为任务的一部分,我的任务是使用Swift中的核心数据在笔记跟踪项目中创建一个UISearchController 我发现的每个示例都在Objective-C中,或者正在过滤静态数组。2014年12月更新的苹果“示例”代码没有在Xcode 6.3中编译 要添加一个UISearchController,我有三个主要任务要做: 1) 创建视图控制器以显示搜索结果。我正在使用TableViewController 2) 创建UISearchController,并将其传递

我目前正在学习iOS开发课程。作为任务的一部分,我的任务是使用Swift中的核心数据在笔记跟踪项目中创建一个
UISearchController

我发现的每个示例都在Objective-C中,或者正在过滤静态数组。2014年12月更新的苹果“示例”代码没有在Xcode 6.3中编译

要添加一个
UISearchController
,我有三个主要任务要做:

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将通知其SearchResultsUpdate(符合UISearchResultsUpdate的类)。我正在使用我的搜索结果视图控制器实现此协议,以便更新筛选结果

下面是我的
注意: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])
}

}

设置上下文有两种方法:

调用应用程序代理:,如下所示

    let appDelegate : AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context = appDelegate.managedObjectContext!
将上下文从应用程序委托向前传递到主视图控制器,然后主视图控制器将其传递到任何后续视图控制器等。每个视图控制器都需要为上下文定义一个属性;实例化新VC时,在呈现/推送VC之前设置上下文,例如:

    class CustomViewController : UIViewController {
        var managedObjectContext : NSManagedObjectContext
        ...
并且,在加载新的视图控制器时

    let newVC = CustomViewController()
    newVC.managedObjectContext = self.managedObjectContext
    ...
要访问对象,请使用
NSFetchRequest
NSFetchedResultsController
创建一个结果数组,然后将其传递给resultsController。例如,对于获取请求:

    let fetch = NSFetchRequest(entityName: "Notes")
    var error : NSError? = nil
    let fetchedResults = managedObjectContext?.executeFetchRequest(fetch, error: &error)

(您的notes()函数走错了方向-您不会使用NSArray(contentsOfFile:)访问CoreData对象。此外,您必须为NSManagedObject子类使用指定的初始化器:因此不是
var note=notes()
而是
var note=notes()(实体:NSEntityDescription,插入ManagedObjectContext:NSManagedObjectContext?)

谢谢。我还没有完全弄明白,但这非常有帮助。感觉上我是第一个使用Swift在核心数据项目中实现
UISearchController
的人。我想我要取消我的分支,重新开始,纳入您的建议。在“步骤”方面,我的路径正确吗?语法错误?是的,您问题中的步骤看起来不错。您使用了哪个项目模板?我认为主详细信息模板的工作原理是从应用程序委托向前传递上下文,并使用NSFetchedResultsController填充主表视图。我将从该模板开始,然后导入Corporat搜索控制器。是的。我正在使用一个主-细节VC布局。我正在挑选(不是编译,而是“手工”打孔)也引用了一个“产品”数组。我想我仍然需要创建一个包含在managedObjectContext中的“注释”数组,我可以将其作为类方法调用。