苹果开发者SwiftUI教程预览问题-与UIKit接口的框架集成

苹果开发者SwiftUI教程预览问题-与UIKit接口的框架集成,swift,xcode,swiftui,uikit,Swift,Xcode,Swiftui,Uikit,我对Swift和Xcode相当陌生。我一直在关注苹果的SwiftUI教程,在我来到这里之前没有遇到太多问题:与UIKit()的接口 当我进入步骤5时,构建成功,但没有预览。 我收到的错误是: “RemoteHumanReadableError:更新预览失败 预览过程似乎已崩溃 向代理发送“呈现”消息时遇到错误 ================================== |RemoteHumanReadableError:无法完成操作。(BSServiceConnectionErrorD

我对Swift和Xcode相当陌生。我一直在关注苹果的SwiftUI教程,在我来到这里之前没有遇到太多问题:与UIKit()的接口

当我进入步骤5时,构建成功,但没有预览。 我收到的错误是:

“RemoteHumanReadableError:更新预览失败

预览过程似乎已崩溃

向代理发送“呈现”消息时遇到错误

==================================

|RemoteHumanReadableError:无法完成操作。(BSServiceConnectionErrorDomain错误3。) |
|BSServiceConnectionErrorDomain(3): |==BSErrorCodeDescription:操作失败”

任何关于我做错了什么以及为什么做错的帮助都将是巨大的帮助:)

编辑:添加代码


导入快捷键
结构页面视图:视图{
var viewControllers:[UIHostingController]
初始化(uu视图:[页面]){
self.viewControllers=views.map{UIHostingController(rootView:$0)}
}
var body:一些观点{
PageViewController(控制器:ViewController)
}
}
结构页面视图\u预览:PreviewProvider{
静态var预览:一些视图{
页面视图(features.map{FeatureCard(landmark:$0)})
.aspectRatio(3/2,内容模式:.fit)
}
}

我也有这个问题。当在模拟器上运行时,一切正常。

使用此功能,我能够使用以下代码在XCode 12中实现此功能:

import SwiftUI

struct PageView<Page: View>: View {
    var viewControllers: [UIHostingController<Page>]

    init(viewControllers: [UIHostingController<Page>]) {
        self.viewControllers = viewControllers
    }
    
    init(_ views: [Page]) {
        self.viewControllers = views.map { UIHostingController(rootView: $0) }
    }
    
    var body: some View {
        PageViewController(controllers: viewControllers)
    }
}

struct PageView_Previews: PreviewProvider {
    // the static in the following line is critical to it working...
    static let controllers = features.map { UIHostingController(rootView: FeatureCard(landmark: $0)) }
    
    static var previews: some View {
        PageView(viewControllers: controllers).aspectRatio(3/2, contentMode: .fit)
    }
}
导入快捷界面
结构页面视图:视图{
var viewControllers:[UIHostingController]
初始化(视图控制器:[UIHostingController]){
self.viewControllers=viewControllers
}
初始化(uu视图:[页面]){
self.viewControllers=views.map{UIHostingController(rootView:$0)}
}
var body:一些观点{
PageViewController(控制器:ViewController)
}
}
结构页面视图\u预览:PreviewProvider{
//以下行中的静态对其工作至关重要。。。
静态let controllers=features.map{UIHostingController(rootView:FeatureCard(landmark:$0))}
静态var预览:一些视图{
页面视图(视图控制器:控制器)。aspectRatio(3/2,内容模式:.fit)
}
}
似乎您需要在预览中传递一个完全构造的
UIHostingController
数组,因此我创建了一个额外的
init
重载以用于预览模式。基于
[Page]
init
是为了使代码与教程中的下游步骤兼容。至于它为什么与
静态let
一起工作,很遗憾,我没有任何线索(即,如果您将
let
语句作为非静态
let
放在
预览
中,它将无法生成预览。

这对我有效。 添加了@State&$currentPage以使预览与滑动一起在活动预览中更改图像最终生效

在UIKit开始工作之前,您需要完成第3节“与UIKit交互”,因为您必须在PageViewController.swift中添加必要的行。在第3节-步骤6中指定协调员为代表后,请保持预览固定,以查看其最终工作


//  PageView.swift

import SwiftUI

struct PageView<Page: View>: View {
    @State var currentPage = 1
    
    var viewControllers: [UIHostingController<Page>]

    init(viewControllers: [UIHostingController<Page>]) {
        self.viewControllers = viewControllers
    }
    
    init(_ views: [Page]) {
        self.viewControllers = views.map { UIHostingController(rootView: $0) }
    }
    
    var body: some View {
        VStack {
            PageViewController(controllers: viewControllers, currentPage: $currentPage)
            Text("Current Page: \(currentPage)")
        }
    }
}

 struct PageView_Previews: PreviewProvider {
     static let controllers = features.map { UIHostingController(rootView: FeatureCard(landmark: $0)) }
     
     static var previews: some View {
         PageView(viewControllers: controllers).aspectRatio(3/2, contentMode: .fit)
     }
 }



//PageView.swift
导入快捷键
结构页面视图:视图{
@状态变量currentPage=1
var viewControllers:[UIHostingController]
初始化(视图控制器:[UIHostingController]){
self.viewControllers=viewControllers
}
初始化(uu视图:[页面]){
self.viewControllers=views.map{UIHostingController(rootView:$0)}
}
var body:一些观点{
VStack{
PageViewController(控制器:ViewController,currentPage:$currentPage)
文本(“当前页:\(当前页)”)
}
}
}
结构页面视图\u预览:PreviewProvider{
静态let controllers=features.map{UIHostingController(rootView:FeatureCard(landmark:$0))}
静态var预览:一些视图{
页面视图(视图控制器:控制器)。aspectRatio(3/2,内容模式:.fit)
}
}

尝试注释AppDelegate中的didFinishLaunchingWithOptions方法,希望这可以解决问题。您的应用程序可能引用了外部框架!!

欢迎使用堆栈溢出!是否可以包含有问题的代码?这将有助于确定您可能遇到的问题be@faircloud我已经编辑了这个问题对于代码:)我遇到了完全相同的问题。即使在“完整”文件夹中,没有修改,预览也会以同样的方式崩溃。可能与Xcode 12有关,因为这些教程是针对Xcode 11的?非常令人沮丧。我看到了同样的问题!我甚至创建了一个不同的结构,它接受一个泛型,就像UIHostingController所做的一样。让我觉得罪魁祸首是这里的控制者