gpt4 book ai didi

core-data - 在@FetchRequest 中输入一个动态值,以从 SwiftUI 的核心数据中获取单个实体

转载 作者:行者123 更新时间:2023-12-04 10:56:17 24 4
gpt4 key购买 nike

我在这里看到了相同类型的错误,但使用了不同类型的代码,所以我认为最好在这种情况下提出一个新问题。我试图通过传递一个名为 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
}
}

公开课 Accounts有扩展名:
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
}
}

但是,与 @FetchRequest(fetchRequest: Accounts.getSpecificAccounts(findTitle: title)) var fetchedAccount: FetchedResults<Accounts> 的行有一个语法错误:

Cannot use instance member 'title' within property initializer; property initializers run before 'self' is available



我的代码有问题吗?

最佳答案

@FetchRequest是动态属性,与任何其他属性一样,在您的 AccountMainPage 之前初始化init被称为,所以 self尚不可用,这就是您不能使用 title 的原因属性是 self 的成员,这就是关于编译器错误的内容。

所以这是一个可能的解决方案:我们用 stub 请求初始化获取请求属性,然后在 init ,稍后调用,使用真实的获取请求重新初始化它。

这是一个方法演示(所有无关的东西都被剪掉了):

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))
}

...

关于core-data - 在@FetchRequest 中输入一个动态值,以从 SwiftUI 的核心数据中获取单个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59158694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com