从CoreData获取返回AnyObject

时间:2016-06-02 04:36:52

标签: ios swift core-data

我从coreData获取实体数据,返回AnyObject,我尝试了很多转换为NSDictionary和NSArray,但它不能转换任何类型。

    var dictData:NSDictionary?
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let context = appDelegate.managedObjectContext;
    // self.selectedArray = response.objectForKey("retailers") as! NSArray;
    let fetchRequest2 = NSFetchRequest()
    let entityDescription2 = NSEntityDescription.entityForName("Offers", inManagedObjectContext: context)
    fetchRequest2.entity  = entityDescription2

    //fetchRequest2.returnsObjectsAsFaults = false

    do {
        let result2 : NSDictionary = try context.executeFetchRequest(fetchRequest2) as! NSDictionary
                   print("Result:",result2)
        for result in (result2 as? NSDictionary)!{

            if let data : NSDictionary = result as? NSDictionary{

                print(data)
            }

优惠实体包含否字段。请帮助。它会受到赞赏。

                print("result: ",result)
                print("dictData:",dictData)

`}

2 个答案:

答案 0 :(得分:5)

context.executeFetchRequest()返回[AnyObject],而不是AnyObject

你需要这样做:

if let results = context.executeFetchRequest(fetchRequest2) as? [MyObjectType] {
      for object in results {
        //do thing
    }
  }

答案 1 :(得分:1)

根据其签名executeFetchRequest,始终返回AnyObject数组。 AnyObject,因为返回值可以是NSManagedObjectDictionary,具体取决于获取请求。

默认返回值是非可选 [NSManagedObject]所以写

let result2 = try context.executeFetchRequest(fetchRequest2) as! [NSManagedObject]

这种类型的强制解包是安全的,这种情况下,不需要可选的绑定。

如果您使用的是NSManagedObject的子类,您甚至可以将返回值强制转换为该类型。