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