2015-11-27 3 views
1

Моего расширение доли имеет следующий код как часть didSelectPost() сегмента:Firebase runTransactionBlock() в расширении доли IOS

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 

I считают, что эта ошибка вызвана andCompletionBlock и связана со следующим вопросом: Debug info when run today extension

Как я могу чисто и успешно справиться с остроумием h статус завершения вышеуказанной транзакции?

ответ

1

Как ответ, который вы связали с заявленным, ошибка NSXPCConnection здесь не имеет значения.

Проблема заключается в том, что .runTransactionBlock() является асинхронным, и .completeRequestReturningItems() будет вызываться и покидать расширение до того, как вы когда-либо получите значение из базы данных Firebase.

Попробуйте запустить .completeRequestReturningItems() в andCompletionBlock.

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

} 
+0

Я не могу получить доступ к firebase в моем приложении, я использую obj c как язык –

Смежные вопросы