質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2152閲覧

SwiftUI environmentObjectを使ったViewがクラッシュする

shokotaso

総合スコア1

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/08/26 15:34

PartialSheetを使用したいと、サイトにあるコードをまる写ししてみたのですが、
ビルドではエラーが出ないのにViewがクラッシュしていると出て表示されません
.environmentObject(sheetManager)はどのシートにも追加しないといけないというものを調べて見たので入れてみましたがダメでした
なぜクラッシュしてしまうのか解決してもらいたいです

[Xcode] 12.5.1
[MacOS] Big Sur 11.5.2

イメージ説明

[SampApp]
// SampleApp.swift

import SwiftUI
// 1.PartialSheetをimportする
import PartialSheet

@main
struct SampleApp: App {

let sheetManager: PartialSheetManager = PartialSheetManager() var body: some Scene { WindowGroup { ContentView() .environmentObject(sheetManager) } }

}

[ContentView]
import SwiftUI

struct ContentView: View {
var body: some View {
NavigationView {
HomeView()
}
.addPartialSheet()}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()

}

}

[HomeView]
import SwiftUI
import PartialSheet

struct HomeView: View {
@State var showPartial = false

var body: some View { Button(action: { showPartial.toggle() }) { Text("Open PartialSheet") } .partialSheet(isPresented: $showPartial) { PartialSheetView() }}}

struct PartialSheetView: View {

@EnvironmentObject var partialSheetManager: PartialSheetManager var body: some View { VStack { Text("Partial Sheet") .font(.title) .bold() Button(action: { withAnimation() { partialSheetManager.closePartialSheet() } }) { Text("Close PartialSheet") } .padding(.vertical, 50.0) } .frame(height: 250) }

}

struct HomeView_Previews: PreviewProvider {
static var previews: some View {
HomeView()
}
}

[サイトURL]
https://app-dolphin.com/2021/03/12/swiftui-halfmodal-partialsheet/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

@EnvironmentObject を使った View をプレビューする場合、それぞれのプレビュー構造体で必要な environmentObject を指定する必要があります。
参考: SwiftUI Preview and @EnvironmentObject – SwiftUI – Hacking with Swift forums

diff

1 import SwiftUI 2+import PartialSheet 3 4 // 略 5 6 struct ContentView_Previews: PreviewProvider { 7 static var previews: some View { 8 ContentView() 9+ .environmentObject(PartialSheetManager()) 10 } 11 }

また、ContentView でしか addPartialSheet してないので、それ以外の View のプレビューで PartialSheet を表示したければ addPartialSheet も必要でしょう。

diff

1 struct HomeView_Previews: PreviewProvider { 2 static var previews: some View { 3 HomeView() 4+ .addPartialSheet() 5+ .environmentObject(PartialSheetManager()) 6 } 7 }

投稿2021/08/26 22:26

hoshi-takanori

総合スコア7895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shokotaso

2021/08/30 16:33

返信遅くなりすみません ご丁寧な返信ありがとうございました! 早速修正しようと思ったのですが、また別の問題が出てきまして、 新しいシートでやり直しをしようと思いPartialSheetをSwiftPackageManagerで設定してimportしました シートにimport PartialSheetを書きたすと No such module 'PartialSheet'とエラーが出るようになってしまいました なんども作り直してみましたが同じエラーが出ます。(質問時は出なかったのに、、) 追加での質問で申し訳ないのですが、もし分かれば原因や対処法を教えてもらえると助かります。 すみませんがよろしくお願いいたします
hoshi-takanori

2021/08/31 00:11

「新しいシート」とは何を指してますか? 新しくプロジェクトを作り直したということでしょうか? 「シートにimport PartialSheetを書きたす」とは?
shokotaso

2021/09/16 15:26

返信をいただいていたのに返事が大変遅くなり失礼致しました、 身内に不幸ごとがありまして、、 新しいシートとは新しくプロジェクトを作り直したという意味でした。 また「シートにimport PartialSheetを書きたす」の部分は私が少し勘違いをしており、無事教えていただいたことを実行したらエラーなくプレビューできました ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問