SwiftUI 获取联系人重复
SwiftUI Fetching contacts duplication
我有一个具有获取联系人功能的模型视图:
class ContactsStore: ObservableObject {
@Published var contacts = [CNContact]()
func fetch() {} ...
然后在我看来:
@EnvironmentObject var store: ContactsStore
var groupedContacts: [String: [CNContact]] {
.init (
grouping: store.contacts,
by: {[=11=].nameFirstLetter}
)
}
...
List() {
ForEach(self.groupedContacts.keys.sorted(), id: \.self) { key in ...
为了方便起见,我已经缩短了我的代码,如果需要,我会 add/edit。我面临的问题 - 每次呈现我的视图时,都会调用 fetch
函数,并且我的联系人数组会在我的视图中重复。 TIA 寻求帮助
UPD:由于调用列表 .onAppear
中的方法 fetch
而发生重复。所以我在研究如何只调用一次这个方法,而不是每次视图出现时。
您可以像这样在 Init() 中进行提取:
struct someView: View{
var list: [Settings]
init(){
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest: NSFetchRequest<Settings> = Settings.fetchRequest()
//... some order and filter if you need
self.list = context.fetch(fetchRequest)
}
var body: some View{
...
ForEach(list){settings in
...
}
...
}
}
没有尝试分组,但你问了如何只获取一次。答案是——在 init().
但是你无法在 init
中得到 @Environment
,所以我从 AppDelegate
中得到了 context
。或者您可以将 context
作为 init
参数传递
我有一个具有获取联系人功能的模型视图:
class ContactsStore: ObservableObject {
@Published var contacts = [CNContact]()
func fetch() {} ...
然后在我看来:
@EnvironmentObject var store: ContactsStore
var groupedContacts: [String: [CNContact]] {
.init (
grouping: store.contacts,
by: {[=11=].nameFirstLetter}
)
}
...
List() {
ForEach(self.groupedContacts.keys.sorted(), id: \.self) { key in ...
为了方便起见,我已经缩短了我的代码,如果需要,我会 add/edit。我面临的问题 - 每次呈现我的视图时,都会调用 fetch
函数,并且我的联系人数组会在我的视图中重复。 TIA 寻求帮助
UPD:由于调用列表 .onAppear
中的方法 fetch
而发生重复。所以我在研究如何只调用一次这个方法,而不是每次视图出现时。
您可以像这样在 Init() 中进行提取:
struct someView: View{
var list: [Settings]
init(){
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest: NSFetchRequest<Settings> = Settings.fetchRequest()
//... some order and filter if you need
self.list = context.fetch(fetchRequest)
}
var body: some View{
...
ForEach(list){settings in
...
}
...
}
}
没有尝试分组,但你问了如何只获取一次。答案是——在 init().
但是你无法在 init
中得到 @Environment
,所以我从 AppDelegate
中得到了 context
。或者您可以将 context
作为 init
参数传递