使用核心数据访问检索到的pipe理对象中的数据

我试图访问检索到的pipe理对象中的数据。 Xcode给我错误“不能下标一个值types”[AnyObject]?“与索引types”int“”。 有没有人知道我该怎么做? 谢谢

这是我的方法,它保存数据,并从我的viewDidLoad方法调用:

// save data func saveData (jmeno:String, adresa:String, telefon:String) { // delegate let delegate = UIApplication.sharedApplication().delegate as! AppDelegate // managed object context let managedObjectContext = delegate.managedObjectContext // entity description let entityDescription = NSEntityDescription.entityForName("Contacts", inManagedObjectContext: managedObjectContext!) // instance let contact = Contacts(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext!) // ukládání do attributů contact.name = jmeno contact.adress = adresa contact.phone = telefon // ukládání do cd var error:NSError? managedObjectContext?.save(&error) if let err = error { println("error") } println("neco") } 

最后是我的方法,应该给我从核心数据的数据。 此方法也是从viewDidLoad方法调用的:

 func giveMeData () { // // FETCHING // delegate let delegate = UIApplication.sharedApplication().delegate as! AppDelegate // managed object context let managedObjectContext = delegate.managedObjectContext! // entity description let entityDescription = NSEntityDescription.entityForName("Contacts", inManagedObjectContext: managedObjectContext) // request let request = NSFetchRequest() request.entity = entityDescription // uložení výsledku fetche do array var results = managedObjectContext.executeFetchRequest(request, error: nil) // // GETTING let match = results[0] as! NSManagedObject // HERE IS ERROR let nameString = match.valueForKey("name") as! String let addressString = match.valueForKey("address") as! String let phoneString = match.valueForKey("phone") as! String } 

在Martin R的帮助下,我终于解决了我的问题。 这里是我从giveMeData方法的代码:

 // entity descritption let entityDescription = NSEntityDescription.entityForName("Contact", inManagedObjectContext: managedObjectContext!) // request let request = NSFetchRequest(entityName: "Contacts") //request.entity = entityDescription // predicate - stanovení parametrů, na základě kterejch to vyhodí výsledek //let pred = NSPredicate(format: "(name: %@)", TFname.text) let pred = NSPredicate(format: "name contains[c] %@", TFname.text) request.predicate = pred var error:NSError? var objects = managedObjectContext?.executeFetchRequest(request, error: &error) // pokud objects obsahuje data (tedy data existují a uložiště není nil) tak: if let results = objects { if results.count > 0 { let match = results[0] as! NSManagedObject self.TFname.text = match.valueForKey("name") as! String self.TFadress.text = match.valueForKey("adress") as! String self.TFphone.text = match.valueForKey("phone") as! String self.label.text = "Matches found!" } else { self.label.text = "No match!" } } 

如果你想得到最后的logging,结果[0]不使用结果[(results.count)-1]。 希望这对将来的人有所帮助:)