Справочная информация
Я пытался изучить SwiftData с синхронизацией iCloud и хочу создать хранилище данных в памяти, чтобы можно было тестировать концепции с помощью фиктивных данных, которые добавляются при загрузке и никогда не сохраняются. .
Таким образом, я могу поиграть с данными, закрыть приложение и перезагрузить его, чтобы вернуться к началу. Если я хочу затем поиграть с существующими данными, я могу снять флажок «Только память» и использовать синхронизированные данные iCloud.
Причина вопроса
Проблема заключается в том, что он, похоже, игнорирует isStoredInMemoryOnly при создании SwiftData ModelConfiguration и сохраняет и загружает из источника iCloud, а не из источника в памяти.
Хотя я знаю, что могу быстро создать кнопку «удалить и сбросить все». Теперь я хочу знать, что я делаю неправильно, поскольку я также использую этот же флаг для предварительного просмотра, поэтому не хочу, чтобы возникали другие проблемы из-за тестирования в предварительных просмотрах, сохраняемых в моих данных хранилище.
Предположения
Я не читал ни в одном источнике Apple, что параметр isStoredInMemoryOnly делает то, что говорит, и не позволяет ModelContainer сохранять данные в iCloud. Я не нашел официального описания этого параметра, но думаю, что название понятно.
Дополнительная информация и воссоздание
Мой первый тест (используя приведенный ниже код) работало нормально, так как каждый раз, когда я закрывал приложение, оно теряло данные, но затем я загружал приложение в другой симулятор и обнаруживал, что оно сохраняет данные в iCloud, поскольку перезагрузка приложения не работала очистил данные и не удалял и не переустанавливал приложение, поскольку оно просто извлекло ранее сохраненные данные из iCloud...
Я пробовал это на физическом iPhone, а также удалял приложение со всех симуляторов и физических устройств, удаление данных iCloud для этой учетной записи, а также сброс приложения из консоли CloudKit, и теперь все тесты заставляют его хранить все данные в iCloud, и я даже не могу воспроизвести первоначальный успех.
Вот пример кода (по сути, код синхронизации Apple iCloud по умолчанию, но для параметра isStoredInMemoryOnly установлено значение true.
Вопросы
[*]Я думаю, первое, что нужно спросить, это может ли кто-нибудь подтвердить (через документы Apple), что параметр isStoredInMemoryOnly при создании новая ModelConfiguration (показанная в строке 20 ниже) на самом деле предназначена для предотвращения ее сохранения в контейнере CloudKit, или если это просто плохое имя, и все, кто так говорит, так и предполагали.
Если это так, значит, что-то не так с моим примером кода или это просто (известная?) ошибка.
< /ol>
Пример кода
Ниже приведен краткий пример. Чтобы использовать его, вам понадобится пустой контейнер iCloud, подключенный к выбранной службе CloudKit.
import SwiftUI
import SwiftData
import Foundation
@Model
final class Item {
var timestamp: Date?
init(timestamp: Date) {
self.timestamp = timestamp
}
}
@main
struct CloudKitTest_TempApp: App {
var sharedModelContainer: ModelContainer = {
let schema = Schema([
Item.self,
])
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: true)
do {
return try ModelContainer(for: schema, configurations: [modelConfiguration])
} catch {
fatalError("Could not create ModelContainer: \(error)")
}
}()
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(sharedModelContainer)
}
}
struct ContentView: View {
@Environment(\.modelContext) private var modelContext
@Query private var items: [Item]
var body: some View {
NavigationSplitView {
List {
ForEach(items) { item in
if (item.timestamp != nil) {
NavigationLink {
Text("Item at \(item.timestamp!, format: Date.FormatStyle(date: .numeric, time: .standard))")
} label: {
Text(item.timestamp!, format: Date.FormatStyle(date: .numeric, time: .standard))
}
}
}
.onDelete(perform: deleteItems)
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
EditButton()
}
ToolbarItem {
Button(action: addItem) {
Label("Add Item", systemImage: "plus")
}
}
}
} detail: {
Text("Select an item")
}
}
private func addItem() {
withAnimation {
let newItem = Item(timestamp: Date())
modelContext.insert(newItem)
}
}
private func deleteItems(offsets: IndexSet) {
withAnimation {
for index in offsets {
modelContext.delete(items[index])
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/777 ... -swiftdata
Как создать в памяти ModelContainer для SwiftData? ⇐ IOS
Программируем под IOS
-
Anonymous
1718930314
Anonymous
Справочная информация
Я пытался изучить SwiftData с синхронизацией iCloud и хочу создать хранилище данных в памяти, чтобы можно было тестировать концепции с помощью фиктивных данных, которые добавляются при загрузке и никогда не сохраняются. .
Таким образом, я могу поиграть с данными, закрыть приложение и перезагрузить его, чтобы вернуться к началу. Если я хочу затем поиграть с существующими данными, я могу снять флажок «Только память» и использовать синхронизированные данные iCloud.
Причина вопроса
Проблема заключается в том, что он, похоже, игнорирует isStoredInMemoryOnly при создании SwiftData ModelConfiguration и сохраняет и загружает из источника iCloud, а не из источника в памяти.
Хотя я знаю, что могу быстро создать кнопку «удалить и сбросить все». Теперь я хочу знать, что я делаю неправильно, поскольку я также использую этот же флаг для предварительного просмотра, поэтому не хочу, чтобы возникали другие проблемы из-за тестирования в предварительных просмотрах, сохраняемых в моих данных хранилище.
Предположения
Я не читал ни в одном источнике Apple, что параметр isStoredInMemoryOnly делает то, что говорит, и не позволяет ModelContainer сохранять данные в iCloud. Я не нашел официального описания этого параметра, но думаю, что название понятно.
Дополнительная информация и воссоздание
Мой первый тест (используя приведенный ниже код) работало нормально, так как каждый раз, когда я закрывал приложение, оно теряло данные, но затем я загружал приложение в другой симулятор и обнаруживал, что оно сохраняет данные в iCloud, поскольку перезагрузка приложения не работала очистил данные и не удалял и не переустанавливал приложение, поскольку оно просто извлекло ранее сохраненные данные из iCloud...
Я пробовал это на физическом iPhone, а также удалял приложение со всех симуляторов и физических устройств, удаление данных iCloud для этой учетной записи, а также сброс приложения из консоли CloudKit, и теперь все тесты заставляют его хранить все данные в iCloud, и я даже не могу воспроизвести первоначальный успех.
Вот пример кода (по сути, код синхронизации Apple iCloud по умолчанию, но для параметра isStoredInMemoryOnly установлено значение true.
Вопросы
[*]Я думаю, первое, что нужно спросить, это может ли кто-нибудь подтвердить (через документы Apple), что параметр isStoredInMemoryOnly при создании новая ModelConfiguration (показанная в строке 20 ниже) на самом деле предназначена для предотвращения ее сохранения в контейнере CloudKit, или если это просто плохое имя, и все, кто так говорит, так и предполагали.
Если это так, значит, что-то не так с моим примером кода или это просто (известная?) ошибка.
< /ol>
Пример кода
Ниже приведен краткий пример. Чтобы использовать его, вам понадобится пустой контейнер iCloud, подключенный к выбранной службе CloudKit.
import SwiftUI
import SwiftData
import Foundation
@Model
final class Item {
var timestamp: Date?
init(timestamp: Date) {
self.timestamp = timestamp
}
}
@main
struct CloudKitTest_TempApp: App {
var sharedModelContainer: ModelContainer = {
let schema = Schema([
Item.self,
])
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: true)
do {
return try ModelContainer(for: schema, configurations: [modelConfiguration])
} catch {
fatalError("Could not create ModelContainer: \(error)")
}
}()
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(sharedModelContainer)
}
}
struct ContentView: View {
@Environment(\.modelContext) private var modelContext
@Query private var items: [Item]
var body: some View {
NavigationSplitView {
List {
ForEach(items) { item in
if (item.timestamp != nil) {
NavigationLink {
Text("Item at \(item.timestamp!, format: Date.FormatStyle(date: .numeric, time: .standard))")
} label: {
Text(item.timestamp!, format: Date.FormatStyle(date: .numeric, time: .standard))
}
}
}
.onDelete(perform: deleteItems)
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
EditButton()
}
ToolbarItem {
Button(action: addItem) {
Label("Add Item", systemImage: "plus")
}
}
}
} detail: {
Text("Select an item")
}
}
private func addItem() {
withAnimation {
let newItem = Item(timestamp: Date())
modelContext.insert(newItem)
}
}
private func deleteItems(offsets: IndexSet) {
withAnimation {
for index in offsets {
modelContext.delete(items[index])
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/77721495/how-can-you-create-an-in-memory-modelcontainer-for-swiftdata[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия