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

标签 core-data swiftui ios13 xcode11

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

相关文章:

iphone - 您将如何在 Core Data 中为 Location 建模?

ios - 使用iOS核心数据解析xml数据并存储它

objective-c - 持久存储的核心数据错误

ios - 在 SwiftUI 2.0 中更改应用程序图标时发生 fatal error

ios - CBPeripheral.ancsAuthorized 信息不可靠

ios - 有什么方法可以为单个对象优化简单的 NSFetchRequest 吗?

ios - SwiftUI · 后台计时器在模拟器上有效,但在真实设备上无效

colors - 更改 TabView 中未选中图标的颜色(SwiftUI)

php - 用于推送通知的 iOS 13 PHP 脚本负载

in-app-purchase - 在 iOS 13 中请求应用内购买失败