无法获取远程视图控制器并出现错误:错误:域 = _UIViewServiceInterfaceErrorDomain,代码 = 2

Posted

技术标签:

【中文标题】无法获取远程视图控制器并出现错误:错误:域 = _UIViewServiceInterfaceErrorDomain,代码 = 2【英文标题】:Failed to get remote view controller with error: Error: domain=_UIViewServiceInterfaceErrorDomain, code=2 【发布时间】:2017-06-02 10:47:10 【问题描述】:

我有一个非常令人沮丧的错误。我已经进入 ios 开发 3 个月了。我一直在登录 facebook,然后连接到 Firebase。我一开始就实现了这一点。它运行良好,今天我醒来将应用程序放到商店中......并且 Facebook 登录不起作用。

我的登录 Facebook 的代码绝对没有任何变化(我几乎可以肯定,但我已经检查了所有内容!)发生的情况是您将单击 facebook 登录按钮,它只会是白色的(通常会有是一个互联网浏览器)。我得到的错误是:

[ViewService] Failed to get remote view controller with error: Error: domain=_UIViewServiceInterfaceErrorDomain, code=2

我已经完全改变了代码。我的 bundleID 和 appID 与 facebook 开发人员中的相同。

我完全不知道它是什么,有类似问题的极少数人似乎也不知道。我想了解,但是能够解决它并且将来不会发生真的很棒!我正在快速编码,但我没有像 Facebook 文档中那样使用 swiftSDK,而是使用 FBSDKLoginButton。

我也在模拟器上试过这个,但没有发生。它只发生在我的手机上。

我真的不确定什么是有用的信息,所以如果我包含不相关的内容,我很抱歉。

我正在使用 facebook sdk 4.20.2

这是我的 info.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>CeleBreak</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>fb1253394891414659</string>
            </array>
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>FacebookAppID</key>
    <string>1253394891414659</string>
    <key>FacebookDisplayName</key>
    <string>CelebreakApp</string>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>fbauth2</string>
    </array>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSAllowsArbitraryLoadsInWebContent</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict/>
    </dict>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>armv7</string>
    </array>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
</dict>
</plist>

这是我的登录 VC:

class LoginVC: UIViewController: FBSDKLoginButtonDelegate 
@IBOutlet weak var loginButton: FBSDKLoginButton!

public var originVC: UIViewController = TabBarController()

override func viewDidLoad()
    phoneNumberTextField.delegate = self
    loginButton.delegate = self
    phoneNumberTextField.keyboardType = UIKeyboardType.numberPad

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error?) 


func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) 
    fatalError("Logging out in Login View shouldn't happen")


那么登录按钮就是一个FBSDKLoginButton。当我查看 Facebook 文档时,它并没有解释如何这样做,而是解释了使用 swift SDK 进行操作,但我遵循了以这种方式设置 Facebook 的指南,并没有真正理解它。

【问题讨论】:

【参考方案1】:

解决方案:从手机上的 Safari 设置中清除数据和历史记录。

信用:https://***.com/a/44457044/7442549

在彻底测试我的登录流程时,我遇到了同样的问题 - 反复登录/注销,使用 FB 原生应用程序而不是 Safari 登录等。

我猜这是 FB 登录 / Safari 之间交互的一个弱点。

【讨论】:

以上是关于无法获取远程视图控制器并出现错误:错误:域 = _UIViewServiceInterfaceErrorDomain,代码 = 2的主要内容,如果未能解决你的问题,请参考以下文章

进行模拟后无法获取访问控制,出现错误

Google 登录 API 挂起并出现未捕获的错误无法从 URL 哈希获取父源

主域和受信域之间的信任关系失败

目标 C 错误 -[__NSArrayI 长度]:无法识别

无法确定当前国家代码:错误域=NSURLErrorDomain 代码=-1005 “网络连接丢失。”

桌面总是跳出获取版本错误,无法连接到远程服务器,怎么办