按名称获取核心数据?

时间:2015-07-17 09:55:47

标签: ios swift core-data

我目前正在开发一个新项目,在Swift中重新获取抓取请求遇到一些困难。

基本上我的设置如下:

实体“植物” - 名称,信息,植物2(到目前为止占位符) 实体“PlantLog” - 名称,日期,erg,cmt,肥料

我已经拥有带有“植物”的TableView,并且可以更新植物信息,例如名称,信息和“Plant2”。当我还有一个名为“添加日志”的按钮,其中植物的名称被赋予新的视图:

 if segue.identifier == "addLog"
    {

        var existingPlant: String = textFieldName.text
        let IVC: AddPlantViewController = segue.destinationViewController as! AddPlantViewController
        IVC.name = existingPlant


    }

这完美无缺。还使用Name和其他东西保存到PlantLog实体。但现在我的问题出现了 - >当我单击Save时,它还应该执行一个segue操作,在其中更新PlantView for Plant,其中只有“name”的日志条目可以调用它“Pachira”,并且segue“Show eg Push”给出了值对于PlantDetail页面。

@IBAction func testFetch(sender: AnyObject) {


    var error: NSError?
    let fetchRequest = NSFetchRequest(entityName: "Plants")
    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let contxt: NSManagedObjectContext = appDel.managedObjectContext!
    let fetchResults = contxt.executeFetchRequest(fetchRequest, error: &error)

    let predicate = NSPredicate(format: "name == %@", name)


    //fetchRequest.predicate = predicate

     // var data: NSManagedObject = fetchResults as! NSManagedObject
   // labelName.text = predicate


}

这只是一个测试,如果我可以使用名称“Pachira”获取行,但我找不到解决方案从我的核心数据中获取“Pachira”以及“Info”和“Plant2”。

2 个答案:

答案 0 :(得分:0)

您没有提供有关崩溃的信息,但从这些注释掉的行的外观来看,您在访问抓取结果时遇到了问题。首先,您需要在执行提取之前为提取请求设置谓词。然后,executeFetchRequest的返回值是一个数组 - 即使只有一个匹配的对象。因此,重新排列您的提取如下:

var error: NSError?
let fetchRequest = NSFetchRequest(entityName: "Plants")
let predicate = NSPredicate(format: "name == %@", name)
fetchRequest.predicate = predicate
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let contxt: NSManagedObjectContext = appDel.managedObjectContext!
let fetchResults = contxt.executeFetchRequest(fetchRequest, error: &error)
// You should check whether fetchResults is nil, and if so log the error. 
//  You should also ensure that at least one object is returned.
let object = fetchResults![0]
println("\(object)")

答案 1 :(得分:0)

谢谢你的帮助。 我的输出现在说:

 data: { info = TEST; name = Pachira; Plant2 = TEST; }

这将是完美的。但是如何检索一个值。当我说“object.info”时,它说对象没有一个名为info的孩子......但它就在那里。

编辑:

我多么愚蠢......我忘记了:

  let test = object.valueForKey("name")

现在输出显示“可选(Pachira)”。 我怎么能摆脱它?

编辑第二期:

我再次非常顽固地看不到我的错误...当然我必须将我的Array值转换为字符串......

谢谢!