我目前正在开发一个新项目,在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”。
答案 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值转换为字符串......
谢谢!