Problem mit der Vorschau auf SwiftUI-Tutorial für Apple-Entwickler - Framework Integration Interfacing with UIKit
Ich bin ziemlich neu in Swift und Xcode. Ich habe die SwiftUI-Tutorials von Apple verfolgt und hatte keine großen Probleme, bis ich hier ankam: Schnittstelle mit UIKit (https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit)
Wenn ich zu Schritt 5 komme, ist der Build erfolgreich, aber es gibt keine Vorschau. Der Fehler, den ich erhalte, ist:
“RemoteHumanReadableError: Aktualisierung der Vorschau fehlgeschlagen.
Der Vorschauprozess scheint abgestürzt zu sein.
Beim Senden der Render-Nachricht an den Agenten ist ein Fehler aufgetreten.
==================================
| RemoteHumanReadableError: Der Vorgang konnte nicht abgeschlossen werden. (BSServiceConnectionErrorDomain-Fehler 3.) |
| BSServiceConnectionErrorDomain (3): | == BSErrorCodeDescription: OperationFailed ”
Jede Hilfe, was ich falsch mache und warum es falsch ist, wäre eine große Hilfe :)
Bearbeiten: Code hinzugefügt
import SwiftUI
struct PageView<Page: View>: View {
var viewControllers: [UIHostingController<Page>]
init(_ views: [Page]) {
self.viewControllers = views.map { UIHostingController(rootView: $0) } } var body: some View { PageViewController(controllers: viewControllers) } } struct PageView_Previews: PreviewProvider { static var previews: some View { PageView(features.map { FeatureCard(landmark: $0) })
.aspectRatio(3/2, contentMode: .fit)
}
}
Antworten
Mit dieser Seite als Inspiration konnte ich diese Funktion in XCode 12 mithilfe des folgenden Codes ausführen:
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)
}
}
Es scheint, dass Sie ein vollständig erstelltes UIHostingControllerArray aus der Vorschau heraus übergeben müssen, daher habe ich eine zusätzliche initÜberladung erstellt, die für den Vorschaumodus verwendet werden soll. Die [Page]Basis initist, den Code mit den nachgeschalteten Schritten im Lernprogramm kompatibel zu halten. static letIch habe leider keine Ahnung , warum es mit dem funktioniert. Wenn Sie die letAnweisung previewsals nicht statisch leteinfügen, wird die Vorschau nicht generiert.
das hat bei mir funktioniert. @State & $ currentPage hinzugefügt, damit die Vorschau zusammen mit dem Wischen zum Ändern von Bildern in der aktiven Vorschau endlich funktioniert!
Sie müssen Abschnitt 3 der Schnittstelle mit UIKit beenden, bevor es funktioniert, da Sie die erforderlichen Zeilen in PageViewController.swift hinzufügen müssen. Lassen Sie die Vorschau festgehalten, damit sie endlich funktioniert, wenn Sie den Koordinator in Abschnitt 3 - Schritt 6 als Delegierten zuweisen.
// 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)
}
}
Ich habe auch dieses Problem. Wenn Sie auf einem Simulator laufen, ist das in Ordnung.