【问题标题】:Firebase runTransactionBlock() in iOS share extensioniOS 共享扩展中的 Firebase runTransactionBlock()
【发布时间】:2015-11-27 04:45:56
【问题描述】:

我的分享扩展有以下代码作为didSelectPost() 段的一部分:

override func didSelectPost() {
    if self.sharedURL != nil {
            // Send data to Firebase
            self.myRootRef.runTransactionBlock({
                (currentData:FMutableData!) in
                var value = currentData.value as? String
                // Getting the current value
                // and checking whether it's null
                if value == nil {
                    value = ""
                }
                // Setting the new value to the clipboard
                // content
                currentData.value = self.sharedURL?.absoluteString

                // Finalizing the transaction
                return FTransactionResult.successWithValue(currentData)
                }, andCompletionBlock: {
                    // Completion Check
                    (error:NSError!, success:Bool, data:FDataSnapshot!) in
                    print("DEBUG- We're done:\(success) and \(error)")
                }
            )
        }

        // This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments.
        // Inform the host that we're done, so it un-blocks its UI. Note: Alternatively you could call super's -didSelectPost, which will similarly complete the extension context.
        self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
}

我在运行时收到以下错误:

host connection <NSXPCConnection: 0x7fb84af2e8c0> connection from pid 16743 invalidated

我认为此错误是由于andCompletionBlock 引起的,并且与以下问题有关:Debug info when run today extension

如何干净、成功地处理上述交易的完成状态?

【问题讨论】:

    标签: ios firebase ios-extensions


    【解决方案1】:

    就像您链接到的答案所述,NSXPCConnection 错误在这里无关紧要。

    问题在于.runTransactionBlock() 是异步的,.completeRequestReturningItems() 将在您从 Firebase 数据库中获取值之前被调用并退出扩展。

    尝试在andCompletionBlock 中运行.completeRequestReturningItems()

    override func didSelectPost() {
        if self.sharedURL != nil {
                // Send data to Firebase
                self.myRootRef.runTransactionBlock({
                    (currentData:FMutableData!) in
                    var value = currentData.value as? String
                    // Getting the current value
                    // and checking whether it's null
                    if value == nil {
                        value = ""
                    }
                    // Setting the new value to the clipboard
                    // content
                    currentData.value = self.sharedURL?.absoluteString
    
                    // Finalizing the transaction
                    return FTransactionResult.successWithValue(currentData)
                    }, andCompletionBlock: {
                        // Completion Check
                        (error:NSError!, success:Bool, data:FDataSnapshot!) in
                                self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
                    }
                )
            }
    
    }
    

    【讨论】:

    • 我无法在我的应用程序扩展中访问 firebase,我使用 obj c 作为语言
    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    相关资源
    最近更新 更多