NSFetchRequest使用泛型T.fetchRequest()获取到的值是uninitialized,为什么?

我写了一个方法

`/// 获取所有数据

// 获取表的数据
// 我使用 Core Data 创建了一个 Person 实体 ,当然还有其他实体
// 我想通过一个方法来获取某个实体的所有数据,于是使用了泛型,下面的是我的方法定义
func getObjects<T: NSManagedObject>()->[T]{
    print("\(T.self)") // 这里打印的结果确实是 Person
    // 下面这句代码执行后有fetchRequest 对象,但是它是uninitialized 的。
    // 如果我把T换成 Person 执行是正确的
    // 还有另外一种情况下使用泛型T执行下面的代码是正确的,就是在获取数据之前我调用NSEntityDescription.insertNewObject添加数据,
    // 那么使用泛型也能正确执行代码,直接使用泛型就会无效
    let fetchRequest: NSFetchRequest = T.fetchRequest()
    do {
        let result = try self.context.fetch(fetchRequest)
        return result as! [T]
    } catch {
        return []
    }
}`   
这个是为什么呢?

脑瓜疼了半天了

阅读 1.8k
1 个回答

脑瓜疼完后,,追踪还是找到不到解决方法,最后只能换一种方式创建

func getObjects<T: NSManagedObject>() ->[T] {
        print("\(T.self)")
        // 用这个方法就创建就没有问题,上面问题的原因真™找不到。
        let fetchRequest = NSFetchRequest<T>(entityName: "\(T.self)")
        do {
            let result = try self.context.fetch(fetchRequest)
            return result as! [T]
        } catch {
            return []
        }
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题