2016-08-05 2 views
0

У меня возникли проблемы с Aleibr Core Data в Xcode 8 Beta. DataContext и DataContextOptions, похоже, отсутствуют в ветви Swift_3. Схватившись на соломинках, я просто обновил файлы с главной ветви до синтаксиса Swift3, надеясь, что функциональность не слишком сильно изменилась. Но когда он пытается прочитать данные, я получаю сообщение об ошибке «Не удается получить без NSManagedObjectContext в области видимости». Я сделал столько же сортировки, сколько могу придумать. Точки останова, установленные на месте, которое создает NSManagedObjectContext, и я могу это увидеть. Место, создающее fetchRequest, было обновлено с помощью нового синтаксиса NSFetchReqeust (хотя я не вижу никаких признаков MOC там).Использование данных Aleibr Core с Swift 3

Вот моя ссылка в 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), что для этого нужно работать. Как! [Self.Element] имеет решающее значение, потому что Swift использует его для вывода RestultType в функцию, которая строит NSFetchRequest

Надеюсь, это поможет.

Смежные вопросы