2017-06-05 53 views
0

本地快速開發的新手! 打開下面的問題https://github.com/forcedotcom/SalesforceMobileSDK-iOS/issues/2072構建失敗:可選類型'[SFUserAccount]?'的值不解開

移動SDK的版本中使用:5.1.0
問題在本機應用程序或應用混合發現:原生應用
OS版本:10.12.5
設備:iPhone 6

重現步驟:

  1. forceios創建
  2. 提供的應用程序類型爲native_swift並添加其他所需的詳細信息
  3. 打開*.xcworkspace文件在Xcode
  4. 生成項目

錯誤:Value id optional type '[SFUserAccount]?' not unwrapped;

func handleSdkManagerLogout() 
     { 
      self.log(.debug, msg: "SFAuthenticationManager logged out. Resetting app.") 
      self.resetViewState {() ->() in 
       self.initializeAppViewState() 

       // Multi-user pattern: 
       // - If there are two or more existing accounts after logout, let the user choose the account 
       // to switch to. 
       // - If there is one existing account, automatically switch to that account. 
       // - If there are no further authenticated accounts, present the login screen. 
       // 
       // Alternatively, you could just go straight to re-initializing your app state, if you know 
       // your app does not support multiple accounts. The logic below will work either way. 

       var numberOfAccounts : Int; 
       let allAccounts = SFUserAccountManager.sharedInstance().allUserAccounts() 
       numberOfAccounts = (allAccounts!.count); 

       if numberOfAccounts > 1 { 
        let userSwitchVc = SFDefaultUserManagementViewController(completionBlock: { 
         action in 
         self.window!.rootViewController!.dismiss(animated:true, completion: nil) 
        }) 
        if let actualRootViewController = self.window!.rootViewController { 
         actualRootViewController.present(userSwitchVc!, animated: true, completion: nil) 
        } 
       } else { 
        if (numberOfAccounts == 1) { 
         SFUserAccountManager.sharedInstance().currentUser = allAccounts[0] 

// ERROR: Value id optional type '[SFUserAccount]?' not unwrapped; 
        } 
        SalesforceSDKManager.shared().launch() 
       } 
      } 
     } 
+0

什麼是鏈接器錯誤?您可以從左側面板複製粘貼。 – deadbeef

+0

請不要張貼代碼的截圖。改爲發佈實際的代碼。 – Dima

+0

鏈接器錯誤可能只是Xcode壞了。清理生成文件夾,它應該工作。 –

回答

1

SFUserAccountManagerallUserAccounts屬性爲nullable

- (nullable NSArray <SFUserAccount *> *) allUserAccounts; 

https://github.com/forcedotcom/SalesforceMobileSDK-iOS/blob/master/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Security/SFUserAccountManager.h#L188

如果你知道一個事實,即它會向你要使用它的時候存在,您可以通過鍵入allAccounts![0]執行力展開。如果您需要處理,其中可能爲零的情況下,你需要做類似的東西來檢查的是:

if let accounts = allAccounts 
{ 
    currentUser = accounts[0] 
} 
else 
{ 
    // does not exist 
} 

什麼,我不能告訴你的是它是否是零實際上是一個有效的情況下,你需要處理,因爲我不熟悉圖書館。你需要自己做研究或問問他們。

+0

第一個錯誤已修復,但我仍然看到「Apple Mach-O鏈接程序錯誤」。我無法找到錯誤的詳細信息。 – moustacheman

+0

我的項目名稱出現問題,因爲我已經使用'.',我的不好!非常感謝您的時間和幫助! – moustacheman

0

您需要打開allAccounts,因爲它是一個可選的數組。並且由於上面已經使用強制解包來獲得numberOfAccounts,所以使用它可能是安全的。

試試這個:

SFUserAccountManager.sharedInstance().currentuser = allAccounts![0]