Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 在@FetchRequest中输入一个动态值,以从SwiftUI中的核心数据中获取单个实体_Core Data_Swiftui_Ios13_Xcode11 - Fatal编程技术网

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

...