SwiftUI: Невозможно выполнить предварительный просмотр в этом файле - возможно, произошел сбой * .app., Но он прекрасно работает - PullRequest
0 голосов
/ 23 марта 2020

Я только что завершил порт SwiftUI простого приложения Android, которое я сделал (спасибо всем здесь за помощь), но оно не будет отображаться на холсте. Он встроен в симулятор и на моем телефоне хорошо, хотя.

Это как-то связано с вызовом функции выбора базы данных в .onAppear, так как когда я комментирую эту часть кода, она работает нормально.

import SwiftUI
import AVFoundation

struct SoundPageView: View {

    var category: String
    var pageTitle: String
    var buttonRows = [ButtonData]()
    @State var btns: [[String]] = [[]]
    @State var translation: String = "Bahasa Indonesia"
    @State var gotValues: Bool = false

    var btn1: String = "First Button"
    var btn2: String = "Second Button"
    var btn3: String = "Third Button"
    var btn4: String = "Fourth Button"
    var btn5: String = "Fifth Button"
    var btn6: String = "Sixth Button"
    var btn7: String = "Seventh Button"
    var btn8: String = "Eighth Button"
    var btn9: String = "Ninth Button"
    var btn10: String = "Tenth Button"
    var btn11: String = "Eleventh Button"
    var btn12: String = "Twelfth Button"
    var btn13: String = "Thirteenth Button"
    var btn14: String = "Fourteenth Button"
    var btn15: String = "Fifteenth Button"
    var btn16: String = "Sixteenth Button"

    var body: some View {
        VStack {
            Text("\(self.translation)")
            //    .italic()
                .frame(maxWidth: .infinity)
                .multilineTextAlignment(.center)
                .frame(height: 50)
                .padding(.horizontal, 4)
            HStack(spacing:0) {
                VStack {
                    Button(action: {
                        playSound(sound: "\(self.category)_audio1", type: "mp3")
                        self.translation = self.btns[1][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[1][0])")
                        } else {
                            Text("\(self.btn1)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio3", type: "mp3")
                        self.translation = self.btns[3][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[3][0])")
                        } else {
                            Text("\(self.btn3)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio5", type: "mp3")
                        self.translation = self.btns[5][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[5][0])")
                        } else {
                            Text("\(self.btn5)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio7", type: "mp3")
                        self.translation = self.btns[7][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[7][0])")
                        } else {
                            Text("\(self.btn7)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio9", type: "mp3")
                        self.translation = self.btns[9][1]
                    }) {                            if(gotValues==true) {
                        Text("\(self.btns[9][0])")
                    } else {
                        Text("\(self.btn9)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio11", type: "mp3")
                        self.translation = self.btns[11][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[11][0])")
                        } else {
                            Text("\(self.btn11)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio13", type: "mp3")
                        self.translation = self.btns[13][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[13][0])")
                        } else {
                            Text("\(self.btn13)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio15", type: "mp3")
                        self.translation = self.btns[15][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[15][0])")
                        } else {
                            Text("\(self.btn15)")
                        }
                    }
                    .buttonStyle(SoundButton())
                }
                VStack {
                    Button(action: {
                        playSound(sound: "\(self.category)_audio2", type: "mp3")
                        self.translation = self.btns[2][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[2][0])")
                        } else {
                            Text("\(self.btn2)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio4", type: "mp3")
                        self.translation = self.btns[4][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[4][0])")
                        } else {
                            Text("\(self.btn4)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio6", type: "mp3")
                        self.translation = self.btns[6][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[6][0])")
                        } else {
                            Text("\(self.btn6)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio8", type: "mp3")
                        self.translation = self.btns[8][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[8][0])")
                        } else {
                            Text("\(self.btn8)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio10", type: "mp3")
                        self.translation = self.btns[10][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[10][0])")
                        } else {
                            Text("\(self.btn10)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio12", type: "mp3")
                        self.translation = self.btns[12][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[12][0])")
                        } else {
                            Text("\(self.btn12)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio14", type: "mp3")
                        self.translation = self.btns[14][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[14][0])")
                        } else {
                            Text("\(self.btn14)")
                        }
                    }
                    .buttonStyle(SoundButton())
                    Button(action: {
                        playSound(sound: "\(self.category)_audio16", type: "mp3")
                        self.translation = self.btns[16][1]
                    }) {
                        if(gotValues==true) {
                            Text("\(self.btns[16][0])")
                        } else {
                            Text("\(self.btn16)")
                        }
                    }
                    .buttonStyle(SoundButton())
                }
            }

        }
        .onAppear {
            let buttonRows = DatabaseHelper().queryDatabase(category: self.category)
            for each in buttonRows {
                self.btns.append([each.english,each.indonesian])
            }
            self.gotValues = true

        }
        .navigationBarTitle(Text(self.pageTitle), displayMode: .inline)
    }
}

struct SoundPageView_Previews: PreviewProvider {
    static var previews: some View {
        SoundPageView(category: "", pageTitle: "")
    }
}

struct SoundButton: ButtonStyle {

    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .font(.custom("arial", size: 20))
            .padding(.horizontal, 4).minimumScaleFactor(0.9)
            .foregroundColor(Color.black)
            .multilineTextAlignment(.center)
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .background(configuration.isPressed ? LinearGradient(gradient: Gradient(colors: [Color("DarkestGreen"), Color("LightGreen")]), startPoint: .top, endPoint: .bottom):LinearGradient(gradient: Gradient(colors: [Color("DarkGreen"), Color("LightGreen")]), startPoint: .top, endPoint: .bottom))
            .cornerRadius(10)
            .shadow(radius: 3.0)
            .overlay(
                RoundedRectangle(cornerRadius: 10)
                    .stroke(Color.white, lineWidth:2))
            .padding(2)
            .scaleEffect(configuration.isPressed ? 0.975 : 1.0)
    }
}

Вот сообщение об ошибке I ' Я попадаю на холст.

enter image description here

В идеале я хотел бы вызвать функцию базы данных перед .onAppear, но я не уверен, куда ее поместить. Когда я создаю init (), возникает много ошибок. Как я уже сказал, все в приложении работает точно так, как должно, я просто не хочу, чтобы ошибка cra sh была причиной отклонения моего приложения Apple. Это просто бесплатное приложение для моих учеников и очень простое.

...