Ios SLComposeServiceViewController刷新配置项?
我接着介绍了如何设置Ios SLComposeServiceViewController刷新配置项?,ios,swift,Ios,Swift,我接着介绍了如何设置SLComposeViewController,其中包括如何设置配置项 我正在从MongoDB数据库获取最近修改的项目。这是我的配置项(): 这是我的editConfigurationItem变量: lazy var editConfigurationItem: SLComposeSheetConfigurationItem = { func getFirstCategory(completion: @escaping(String)
SLComposeViewController
,其中包括如何设置配置项
我正在从MongoDB数据库获取最近修改的项目。这是我的配置项()
:
这是我的editConfigurationItem
变量:
lazy var editConfigurationItem: SLComposeSheetConfigurationItem = {
func getFirstCategory(completion: @escaping(String) -> ()) {
DispatchQueue.main.async {
let email: String = customKeychainWrapperInstance.string(forKey: "email") ?? ""
let password: String = customKeychainWrapperInstance.string(forKey: "password") ?? ""
app.login(credentials: Credentials.emailPassword(email: email, password: password)) { (maybeUser, error) in
DispatchQueue.main.sync {
guard error == nil else {
print("Login failed: \(error!)");
return
}
guard let _ = maybeUser else {
fatalError("Invalid user object?")
}
print("Login succeeded!");
}
let user = app.currentUser!
let configuration = user.configuration(partitionValue: user.id)
let predata = try! Realm(configuration: configuration)
let unsortedData = predata.objects(Tiktoks.self)
let data = unsortedData.sorted(byKeyPath: "date", ascending: false)
let firstCategory = data[0].category
let firstCategoryId = data[0]._id
print(firstCategory)
print(firstCategoryId)
self.selectedId = firstCategoryId
completion(firstCategory)
}
}
print("done")
}
let item = SLComposeSheetConfigurationItem()!
item.title = "collection"
item.valuePending = true
getFirstCategory() { (firstCategory) in
item.valuePending = false
print("completed")
item.value = firstCategory // Using self as the closure is running in background
}
item.tapHandler = self.editConfigurationItemTapped
return item
}()
(很抱歉代码太混乱,我是Swift新手)
到目前为止,它还可以工作,但是item.value
变量在UI中没有得到更新。它“无限加载”,直到您单击配置项。当点击配置项转到另一个视图时,数据库中的实际变量会在显示下一个视图之前显示一秒钟。当您从另一个视图返回时,实际变量就在那里
在我看来,配置项没有更新。我看到有一个,但如果将它放在我的editConfigurationItem
中,我会认为这会导致一个循环(它也会出错)。文件甚至说:
特别是,在更改配置项属性后,不需要调用此方法,因为SLComposeServiceViewController基类会自动检测并响应此类更改
但它似乎没有检测到变化
是否有方法刷新项目.value
和项目.valuePending
lazy var editConfigurationItem: SLComposeSheetConfigurationItem = {
func getFirstCategory(completion: @escaping(String) -> ()) {
DispatchQueue.main.async {
let email: String = customKeychainWrapperInstance.string(forKey: "email") ?? ""
let password: String = customKeychainWrapperInstance.string(forKey: "password") ?? ""
app.login(credentials: Credentials.emailPassword(email: email, password: password)) { (maybeUser, error) in
DispatchQueue.main.sync {
guard error == nil else {
print("Login failed: \(error!)");
return
}
guard let _ = maybeUser else {
fatalError("Invalid user object?")
}
print("Login succeeded!");
}
let user = app.currentUser!
let configuration = user.configuration(partitionValue: user.id)
let predata = try! Realm(configuration: configuration)
let unsortedData = predata.objects(Tiktoks.self)
let data = unsortedData.sorted(byKeyPath: "date", ascending: false)
let firstCategory = data[0].category
let firstCategoryId = data[0]._id
print(firstCategory)
print(firstCategoryId)
self.selectedId = firstCategoryId
completion(firstCategory)
}
}
print("done")
}
let item = SLComposeSheetConfigurationItem()!
item.title = "collection"
item.valuePending = true
getFirstCategory() { (firstCategory) in
item.valuePending = false
print("completed")
item.value = firstCategory // Using self as the closure is running in background
}
item.tapHandler = self.editConfigurationItemTapped
return item
}()