2016-08-05 20 views
0

我在Xcode 8 Beta中的Alecrim Core Data中遇到問題。 DataContext和DataContextOptions似乎從Swift_3分支中丟失。抓住吸管,我只是將主分支上的文件更新爲Swift3語法,希望功能沒有太大變化。但是當它試圖讀取數據時,我收到一條錯誤消息「無法在範圍內沒有NSManagedObjectContext的情況下獲取」。 我已經盡我所能地分類了。斷點設置在創建一個NSManagedObjectContext的地方,我可以看到它。創建fetchRequest的地方已經使用新的NSFetchReqeust語法進行了更新(儘管我沒有看到MOC的跡象)。在Swift 3中使用Alecrim核心數據

這裏是我的鏈接進入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 
    } 

} 

有沒有人有經驗與Alecrim在Swift 3,可以幫助找出發生了什麼問題?

謝謝, 邁克

回答

0

我發現我一直在尋找的答案。我不確定這是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)這個工作所需要。 as! [Self.Element]是至關重要的,因爲Swift使用它來推斷構建NSFetchRequest的函數中的RestultType

希望這有幫助。