我在Xcode 8 Beta中遇到Alecrim Core Data的问题。 Swift_3分支似乎缺少DataContext和DataContextOptions。抓住稻草,我只是将文件从master分支更新为Swift3语法,希望功能没有太大变化。但是,当它尝试读取数据时,我收到一条错误消息“在范围内没有NSManagedObjectContext的情况下无法获取”。
我已经尽我所能了。在创建NSManagedObjectContext的位置设置断点,我可以看到它。创建fetchRequest的位置已使用新的NSFetchReqeust语法进行了更新(尽管我看不到那里有MOC的迹象)。

这是我到Alecrim lib DataContext的链接:

let dataContext = DataContext()

extension DataContext
{
    public var collections: Table<CoreDataCollection> { return Table<CoreDataCollection>(context: self) }
    public var expressions: Table<CoreDataExpression> { return Table<CoreDataExpression>(context: self) }
    public var fileAssets: Table<CoreDataFileAsset> { return Table<CoreDataFileAsset>(context: self) }
    public var purchases: Table<CoreDataPurchase> { return Table<CoreDataPurchase>(context: self) }
    public var reeConfigs: Table<CoreDataReeConfig> { return Table<CoreDataReeConfig>(context: self) }
    public var stickers: Table<CoreDataSticker> { return Table<CoreDataSticker>(context: self) }

}


以及尝试获取数据的部分:

for item in dataContext.reeConfigs {
    let reeConfigVO = ReeConfigVO()
    reeConfigVO.initFromCoreData(item)
    items.append(reeConfigVO)
}


我不确定这是否会有所帮助,但是Alecrim抛出错误的部分:

// MARK: - GenericQueryable

extension TableProtocol {

    public final func execute() -> [Self.Element] {
        do {
            return try self.toFetchRequest().execute() as [Self.Element]
        }
        catch let error {
            AlecrimCoreDataError.handleError(error)
        }
    }

}

// MARK: - CoreDataQueryable

extension TableProtocol {

    public final func toFetchRequest<ResultType: NSFetchRequestResult>() -> NSFetchRequest<ResultType> {
        let fetchRequest = NSFetchRequest<ResultType>()

        fetchRequest.entity = self.entityDescription

        fetchRequest.fetchOffset = self.offset
        fetchRequest.fetchLimit = self.limit
        fetchRequest.fetchBatchSize = (self.limit > 0 && self.batchSize > self.limit ? 0 : self.batchSize)

        fetchRequest.predicate = self.predicate
        fetchRequest.sortDescriptors = self.sortDescriptors

        return fetchRequest
    }

}


是否有人在Swift 3中具有Alecrim的经验,可以帮助您找出问题所在?

谢谢,
麦克风

最佳答案

我找到了想要的答案。我不确定这是Alecrim想要完成的工作,因为正如我提到的,swift_3分支甚至都不包含DataContext或DataContextOptions。但是...如果您已将这些文件从主分支中导入,并按照我的方法将它们更新为swift 3,则遇到错误“无法在范围内没有MSManagedObjectContext的情况下无法获取”的问题,这是如何在“ TableProtocol”中进行修复。迅速”文件:

extension TableProtocol {

    public final func execute() -> [Self.Element] {
        do {
            return try self.context.fetch(self.toFetchRequest()) as! [Self.Element]
            //return try self.toFetchRequest().execute() as [Self.Element]
        }
        catch let error {
            AlecrimCoreDataError.handleError(error)
        }
    }
}


self.context是NSManagedObjectContext(或派生类型,即我们的DataContext)才能起作用。如! [Self.Element]至关重要,因为Swift使用它来推断构建NSFetchRequest的函数中的RestultType

希望这可以帮助。

关于swift - 在Swift 3中使用Alecrim Core Data,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38795460/

10-11 14:49