Swift 3 Core Data取回问题

5
下面的函数用于获取表格视图的数据。
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
    }
}

"User"是一个简单的结构体。 "Profile"是Core Data中的实体。我创建了一个结构体数组,用于表格中的单元格。代码没有错误(适用于xCode)。当没有获取到数据时,它会跳过添加数组,但是当有一些信息时,应用程序会崩溃并显示以下错误信息:

致命错误:NSArray元素未能匹配Swift Array Element类型


2
尝试将获取请求中的这一行替换为:let fetchedData = try! context.executeFetchRequest(fetchRequest) as! [AnyObject] - Suresh Kumar Durairaj
@Suresh xCode提示:“无法将类型为NSFetchRequest<Profile>的值转换为预期的NSFetchRequest<NSFetchRequestResult>”。 - user6485277
请将您的代码中的 "let fetchRequest: NSFetchRequest<Profile> = Profile.fetchRequest();" 替换为 "let fetchRequest: NSFetchRequest = NSFetchRequest(entityName:"Profile")"。在这里,"Profile" 应该是您的实体名称,请确保将其作为字符串传递。 - Suresh Kumar Durairaj
@Suresh 我之前尝试过这个方法,但是它显示错误:无法将类型为“NSFetchRequest<>”的值转换为指定类型“NSFetchRequest”。因此,我上面编写的函数是唯一没有显示任何错误的函数。但是它会崩溃。也许是类型的问题。 - user6485277
好的,保留你原来的代码片段不变,在 if (!fetchedData.isEmpty) { 这一行设置一个断点,运行应用程序,当调试器停在这一行时,在输出控制台上执行 (po fetchedData) 命令开始打印 'fetchedData'。注意在输入自动完成时检查 fetchedData 的类型,并分享打印出的 fetchedData 值。这将提供一些线索。 - Suresh Kumar Durairaj
1个回答

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

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

然后我用

command+shift+k

清理了我的项目,检查了核心数据模型是否存在问题,并重新构建了整个项目。神奇。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接