【问题标题】:Swift 3 Core Data fetch issueSwift 3 核心数据获取问题
【发布时间】:2016-06-23 15:09:06
【问题描述】:

下面的函数用于获取tableview的数据

func fetchProfiles() -> Array<User> {
    var users: Array<User> = []
    let fetchRequest: NSFetchRequest<Profile> = Profile.fetchRequest()
    let fetchedData = try! context.fetch(fetchRequest)
    if (!fetchedData.isEmpty) {
        print(fetchedData)
        for i in 0...fetchedData.count {
            var user: User = User()
            user.userName = fetchedData[i].profileName
            user.userSurname = fetchedData[i].profileSurname
            user.userPhoto = fetchedData[i].profilePhoto
            users.append(user)
        }
        return users
    }
    else {
        return users
    }
}

“用户”是一个简单的结构。 “配置文件”是 Core Data 中的一个实体。我创建了一个结构数组以将它们用于表格中的单元格。代码没有错误(对于 xCode)。当没有获取数据时,它会跳过附加数组,但是当有一些信息时,应用程序会崩溃并出现错误:

致命错误:NSArray 元素无法匹配 Swift Array 元素 输入

【问题讨论】:

  • 尝试在获取请求时替换这一行,让 fetchedData = 试试! context.executeFetchRequest(fetchRequest) 为! [任何对象]
  • @Suresh xCode 说:“无法将 NSFetchRequest 类型的值转换为预期的 NSFetchRequest
  • 替换你的 let fetchRequest: NSFetchRequest = Profile.fetchRequest();与 let fetchRequest: NSFetchRequest = NSFetchRequest(entityName:"Profile") 一致,“Profile”应该是您的实体名称,请确保您将其作为字符串传递
  • @Suresh 我之前试过这个,它显示错误:无法将类型“NSFetchRequest”的值转换为指定类型“NSFetchRequest”所以我上面写的函数是唯一没有显示任何错误的函数.但它崩溃了。也许它与类型有关
  • 好吧,保持原来的 sn-p 不变,在 if (!fetchedData.isEmpty) { 这一行打个断点,运行应用程序,当调试器在此行停止时,通过在输出控制台上执行 (po fetchedData) 开始打印“fetchedData”。在输入自动完成时注意 fetchedData 的类型,并共享打印的 fetchedData 值。这将提供一些线索。

标签: ios core-data swift3


【解决方案1】:

由于未知原因,Core Data 实体的自动生成标头存在问题。我刚刚删除了文件夹中的所有文件:

/Users/user/Library/Developer/Xcode/DerivedData/MyApp/Build/Intermediates/MyApp.build/Debug-iphonesimulator/MyApp.build/DerivedSources/CoreDataGenerated

然后用

清理我的项目

command+shift+k

检查了我的核心数据模型是否存在一些可能的问题并重建了整个项目。 魔法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    相关资源
    最近更新 更多