【问题标题】:Xcode CoreData: Error when trying to load an empty array from a fetch requestXcode CoreData:尝试从获取请求中加载空数组时出错
【发布时间】:2020-11-07 23:30:17
【问题描述】:

我目前正在制作一个课程/家庭作业跟踪器应用程序来跟踪您的课程。我有一个选项卡,显示用户创建的课程。但是,当用户第一次使用该应用程序时,他们没有保存任何课程,因此此选项卡为空。页面应该是这样的……

但是,当我使用 ForEach 循环显示空结果时,我目前遇到了错误。

struct MyCourses : View {
  @FetchRequest(entity: Category.entity(), sortDescriptors: [NSSortDescriptor(keyPath: 
  \Category.title, ascending: true)], animation: .spring())

  var categoriesResults : FetchedResults<Category>

  ...

  ForEach(categoriesResults, id: \.self) { category in      // error here
    CategoryBoxView(category: category)
}

CategoryBoxView...

struct CategoryBoxView: View {
@Environment(\.managedObjectContext)
var context: NSManagedObjectContext

var category : Category!

错误:线程 1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0) 我该如何解决这个问题?

【问题讨论】:

    标签: ios swift xcode core-data


    【解决方案1】:

    我遇到了同样的问题。如果 CoreData 没有任何信息,我通过阻止获取来解决它。

    这是我的代码

    func loadIsCurrent() -> [CurrentTrainingPlan] {
            
            var _runs : [CurrentTrainingPlan] = []
            let context = CoreDataStack.persistentContainer.viewContext
            let fetchRequest: NSFetchRequest<CurrentTrainingPlan> = CurrentTrainingPlan.fetchRequest()
            fetchRequest.sortDescriptors = [NSSortDescriptor(key: "index", ascending: false), NSSortDescriptor(key: "isCurrent", ascending: true)]
            
            do {
                let sessions = try context.fetch(fetchRequest)
                if(sessions.count > 0) {
                    _runs = sessions
                }
            } catch {
                print("Something happened while trying to retrieve tasks...")
            }
            return _runs
        }
    

    这里我正在从我正在运行的会话中获取结果,如您所见,它仅在 CoreData 中保存的会话数大于 0 时才会获取

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 2011-10-25
      • 2020-05-04
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      相关资源
      最近更新 更多