SwiftData не сохраняет данные при запуске из Xcode, но работает нормально, когда приложение запускается независимо в симIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 SwiftData не сохраняет данные при запуске из Xcode, но работает нормально, когда приложение запускается независимо в сим

Сообщение Anonymous »

В строке темы сказано все.
Когда я запускаю код из Xcode, запись сохраняется, но без значений, когда я снова запускаю приложение из Xcode, чтобы проверить, правильно ли сохраняются записи. Однако когда я запускаю приложение прямо из симулятора, оно работает нормально. И во время работы из симулятора я убиваю приложение в фоновом режиме, чтобы убедиться, что оно перезапускается с самого начала. Он просто отлично работает.
Здесь я загрузил два видео — «Запуск из Xcode» и «Запуск из симулятора», чтобы показать проблему и то, как она работает нормально при запуске непосредственно из симулятора.
Код SwiftData, который я использую:

Приложение:
import SwiftUI
import SwiftData

@main
struct PennywiseApp: App {
var sharedModelContainer: ModelContainer = {
let schema = Schema([
Transaction.self,
Category.self
])
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)

do {
return try ModelContainer(for: schema, configurations: [modelConfiguration])
} catch {
fatalError("Could not create ModelContainer: \(error)")
}
}()

var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(sharedModelContainer)
}
}

Модель:
import Foundation
import SwiftData
import SwiftUI

@Model
final class Category {
var name: String
var hex: String
var transactionType: TransactionType

init (name: String, hex: String, transactionType: TransactionType) {
self.name = name
self.hex = hex
self.transactionType = transactionType
}
}

Тип транзакции:
enum TransactionType: String, Codable, CaseIterable, Identifiable {
var id: TransactionType {
self
}

case Income = "Income"
case Expense = "Expsense"
}

Первый просмотр:
import SwiftUI
import SwiftData

struct Categories: View {
@State var selectedCategory: Int = 0
@State var showNewCategory: Bool = false
@State var searchText: String = ""

@Environment(\.modelContext) var modelContext
@State private var path = [Category]()
@Query var categories: [Category]

var filteredCategories: [Category] {
var cat : [Category]
if selectedCategory == 0 {
cat = categories.filter { category in
category.transactionType == .Income
}
}
else {
cat = categories.filter { category in
category.transactionType == .Expense
}
}

if searchText.isEmpty {
return cat
} else {
return cat.filter { category in
category.name.localizedCaseInsensitiveContains(searchText)
}
}
}

var body: some View {
NavigationStack(path: $path) {
List {
Section {
ForEach(filteredCategories) { category in
NavigationLink(value: category) {
Circle()
.stroke(Color(hex: category.hex) ?? Color.blue, lineWidth: 3)
.fill(Color(hex: category.hex) ?? Color.blue)
.frame(width: 25, height: 25)
Text("\(category.name)")
}
}
.onDelete(perform: deleteCategory)
}
}
.navigationTitle("Categories")
.navigationDestination(for: Category.self) { category in
NewCategory(category: category)
}
.searchable(text: $searchText)
.autocorrectionDisabled()
.animation(.default, value: searchText)
.toolbar {
ToolbarItem(placement: .principal) {
Picker("Categories", selection: $selectedCategory) {
Text("Income").tag(0)
Text("Expense").tag(1)
}
.frame(width: 200)
.pickerStyle(SegmentedPickerStyle())
.onChange(of: selectedCategory) { oldValue, newValue in
print("\(oldValue) -> \(newValue)")
}
.onAppear {
UISegmentedControl.appearance().tintColor = .blue
}
}

ToolbarItem(placement: .topBarTrailing) {
Button {
showNewCategory.toggle()
addCategory()
} label: {
Image(systemName: "plus.circle.fill")
.symbolEffect(.breathe)
}
}
}
}
}

func addCategory() {
var category: Category
if selectedCategory == 0 {
category = Category(name: "", hex: "", transactionType: TransactionType.Income)
} else {
category = Category(name: "", hex: "", transactionType: TransactionType.Expense)
}

modelContext.insert(category)
try! modelContext.save()
path.append(category)
}

func deleteCategory(at offsets: IndexSet) {
for offset in offsets {
modelContext.delete(filteredCategories[offset])
}

try! modelContext.save()
}
}

#Preview {
@Previewable @State var search = ""
Categories(searchText: search)
}

Второй вид:
struct NewCategory: View {

@State var selectedFlow: Int = 0
@Bindable var category: Category
var pickerColor: Binding { //

Подробнее здесь: https://stackoverflow.com/questions/793 ... app-is-ind
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»