Core data 在@FetchRequest中输入一个动态值,以从SwiftUI中的核心数据中获取单个实体
我在这里看到了相同类型的错误,但代码类型不同,因此我认为最好在此上下文中提出一个新问题。我试图通过将名为Core data 在@FetchRequest中输入一个动态值,以从SwiftUI中的核心数据中获取单个实体,core-data,swiftui,ios13,xcode11,Core Data,Swiftui,Ios13,Xcode11,我在这里看到了相同类型的错误,但代码类型不同,因此我认为最好在此上下文中提出一个新问题。我试图通过将名为title的字符串变量(用作查找该实体的键)传递到@FetchRequest中,从核心数据中“查找特定实体”。这是我使用的代码的一部分 struct AccountMainPage: View { //*** User input *** var title: String //*** Core data enviroment initialisation ***
title
的字符串变量(用作查找该实体的键)传递到@FetchRequest
中,从核心数据中“查找特定实体”。这是我使用的代码的一部分
struct AccountMainPage: View {
//*** User input ***
var title: String
//*** Core data enviroment initialisation ***
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: Accounts.getSpecificAccounts(findTitle: title)) var fetchedAccount: FetchedResults<Accounts>
var body: some View {
//SOME CODE HERE
}
}
但是,@FetchRequest(FetchRequest:Accounts.getSpecificAccounts(findTitle:title))var fetchedAccount:FetchedResults
的行有语法错误:
无法在属性初始值设定项中使用实例成员“title”;属性初始值设定项在“self”可用之前运行
我的代码有什么问题吗?
@FetchRequest
是动态属性,在调用AccountMainPage
init
之前,它与任何其他属性一样被初始化,因此self
还不可用,这就是为什么您不能使用self
的成员title
属性,这就是编译器错误告诉我们的
因此,这里有一个可能的解决方案:我们使用存根请求初始化fetch请求属性,然后在稍后调用的init
中,使用实际的fetch请求重新初始化它
这是一个方法演示(所有不相关的东西都被切掉了):
struct ContentView:View{
变量标题:字符串
@环境(\.managedObjectContext)变量managedObjectContext
@FetchRequest(FetchRequest:Accounts.FetchRequest())var fetchedAccount:FetchedResults
初始化(标题:字符串){
self.title=标题
_fetchedAccount=FetchRequest(FetchRequest:Accounts.getSpecificAccounts(findTitle:title))
}
...
您正在初始化标题,只需将其值设为空即可string@fakiho我不明白你想说什么?我想输入一个字符串。谢谢它部分工作,fetchedAccount
和\u fetchedAccount
之间有什么区别,我会在var body:some View{…}中使用哪一个
节调用内部实体?\u fetchedAccount
是一个请求,fetchedAccount
是一个响应,因此如果要显示结果,则应使用fetchedAccount
@Asperi是否可以从核心数据中只提取一个对象,例如:我没有用户配置文件的多个对象,我有s只有一个用户配置文件,我想只获取一个对象,但我不能。我想将用户配置文件作为一个对象获取,而不是像[UserProfile]这样的数组。我想这样做:@FetchRequest(entity:UserProfile.entity())var UserProfile:FetchedResult…我不知道这是否可行
extension Accounts {
static func getSpecificAccounts(findTitle: String) -> NSFetchRequest<Accounts> {
let request: NSFetchRequest<Accounts> = Accounts.fetchRequest() as! NSFetchRequest<Accounts>
let findDescriptor = NSPredicate(format: "title == %@",findTitle)
request.predicate = findDescriptor
return request
}
}
struct ContentView: View {
var title: String
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: Accounts.fetchRequest()) var fetchedAccount: FetchedResults<Accounts>
init(title: String) {
self.title = title
_fetchedAccount = FetchRequest<Accounts>(fetchRequest: Accounts.getSpecificAccounts(findTitle: title))
}
...