Я не нахожу невозможным использовать основные данные с помощью swiftui, поскольку, когда я передаю основные данные с наблюдаемой переменной объекта, представление о навигационной ссылке будет содержать ссылку на объект даже после того, как представление исчезнет, поэтому, как только я удаляю объект из контекста, приложение сбивает, без сообщений об ошибках. Nil сразу после контекста удалить действие, и приложение работает нормально, но это не решение, потому что мне нужен основной объект данных, чтобы связываться с просмоткой ui Swift и быть источником истины. Как это должно работать? Я серьезно не могу сделать что -то удаленно сложным со Swiftui, кажется, что. < /p>
Я попытался назначить переданный в основной объект данных опциональному @state, но это не работает. Я не могу использовать @Binding, потому что это полученный объект. И я не могу использовать переменную, поскольку элементы управления Swiftui требуют привязки. It only makes sense to use a @ObservedObject, but this cannot be an optional, which means when the object assigned to it gets deleted, the app crashes, because i cannot set it to nil.
Here is the core data object, which is an observable object by default:
class Entry: NSManagedObject, Identifiable {
@NSManaged public var date: Date
}
< /code>
Вот представление, которое передает основной объект ввода данных в другое представление. < /p>
struct JournalView: View {
@Environment(\.managedObjectContext) private var context
@FetchRequest(
entity: Entry.entity(),
sortDescriptors: [],
predicate: nil,
animation: .default
) var entries: FetchedResults
var body: some View {
NavigationView {
List {
ForEach(entries.indices) { index in
NavigationLink(destination: EntryView(entry: self.entries[index])) {
Text("Entry")
}
}.onDelete { indexSet in
for index in indexSet {
self.context.delete(self.entries[index])
}
}
}
}
}
}
< /code>
Теперь вот представление, которое обращается к всем атрибутам из объекта ввода данных, который был передан. Однажды я удаляю эту запись, кстати, кстати, на него все еще ссылаются здесь и приводят к сбою приложения. Я полагаю, что это также связано с тем, что ссылка на навигацию инициализации всех представлений о назначении еще до того, как они будут доступны. Что не имеет смысла, почему это сделало бы это. Это ошибка, или есть лучший способ достичь этого? Даже если я сделаю Delete из журнала, он все равно будет терпеть неудачу, так как навигационная связь все еще ссылается на объект. Интересно, что он не будет сбой, если удалить навигационную связь, которая еще не была нажата. < /P>
struct EntryView: View {
@Environment(\.managedObjectContext) private var context
@Environment(\.presentationMode) private var presentationMode
@ObservedObject var entry: Entry
var body: some View {
Form {
DatePicker(selection: $entry.date) {
Text("Date")
}
Button(action: {
self.context.delete(self.entry)
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Delete")
}
}
}
}
< /code>
Обновление < /strong> < /p>
Сбой приводит меня к первому использованию записи в записи и считывает Поток 1: Exc_bad_instruction (Code = exc_i386_invop, subcode = 0x0). может подумать, чтобы добавить свойство в основной объект данных «Isdeleted» и установить его на True, а не пытаться удалить из контекста. Затем, когда приложение уходит или при запуске, я могу очистить и удалить все записи, которые смельровали? Не идеально, и предпочел бы выяснить, что здесь не так, так как кажется, что я не делаю ничего другого, чем образец MasterDetailApp, который, кажется, работает.
Подробнее здесь: https://stackoverflow.com/questions/591 ... sing-crash
Swiftui, удерживая ссылку на удаленную основную объект данных, вызывая сбой ⇐ IOS
Программируем под IOS
1758348811
Anonymous
Я не нахожу невозможным использовать основные данные с помощью swiftui, поскольку, когда я передаю основные данные с наблюдаемой переменной объекта, представление о навигационной ссылке будет содержать ссылку на объект даже после того, как представление исчезнет, поэтому, как только я удаляю объект из контекста, приложение сбивает, без сообщений об ошибках. Nil сразу после контекста удалить действие, и приложение работает нормально, но это не решение, потому что мне нужен основной объект данных, чтобы связываться с просмоткой ui Swift и быть источником истины. Как это должно работать? Я серьезно не могу сделать что -то удаленно сложным со Swiftui, кажется, что. < /p>
Я попытался назначить переданный в основной объект данных опциональному @state, но это не работает. Я не могу использовать @Binding, потому что это полученный объект. И я не могу использовать переменную, поскольку элементы управления Swiftui требуют привязки. It only makes sense to use a @ObservedObject, but this cannot be an optional, which means when the object assigned to it gets deleted, the app crashes, because i cannot set it to nil.
Here is the core data object, which is an observable object by default:
class Entry: NSManagedObject, Identifiable {
@NSManaged public var date: Date
}
< /code>
Вот представление, которое передает основной объект ввода данных в другое представление. < /p>
struct JournalView: View {
@Environment(\.managedObjectContext) private var context
@FetchRequest(
entity: Entry.entity(),
sortDescriptors: [],
predicate: nil,
animation: .default
) var entries: FetchedResults
var body: some View {
NavigationView {
List {
ForEach(entries.indices) { index in
NavigationLink(destination: EntryView(entry: self.entries[index])) {
Text("Entry")
}
}.onDelete { indexSet in
for index in indexSet {
self.context.delete(self.entries[index])
}
}
}
}
}
}
< /code>
Теперь вот представление, которое обращается к всем атрибутам из объекта ввода данных, который был передан. Однажды я удаляю эту запись, кстати, кстати, на него все еще ссылаются здесь и приводят к сбою приложения. Я полагаю, что это также связано с тем, что ссылка на навигацию инициализации всех представлений о назначении еще до того, как они будут доступны. Что не имеет смысла, почему это сделало бы это. Это ошибка, или есть лучший способ достичь этого? Даже если я сделаю Delete из журнала, он все равно будет терпеть неудачу, так как навигационная связь все еще ссылается на объект. Интересно, что он не будет сбой, если удалить навигационную связь, которая еще не была нажата. < /P>
struct EntryView: View {
@Environment(\.managedObjectContext) private var context
@Environment(\.presentationMode) private var presentationMode
@ObservedObject var entry: Entry
var body: some View {
Form {
DatePicker(selection: $entry.date) {
Text("Date")
}
Button(action: {
self.context.delete(self.entry)
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Delete")
}
}
}
}
< /code>
Обновление < /strong> < /p>
Сбой приводит меня к первому использованию записи в записи и считывает Поток 1: Exc_bad_instruction (Code = exc_i386_invop, subcode = 0x0). может подумать, чтобы добавить свойство в основной объект данных «Isdeleted» и установить его на True, а не пытаться удалить из контекста. Затем, когда приложение уходит или при запуске, я могу очистить и удалить все записи, которые смельровали? Не идеально, и предпочел бы выяснить, что здесь не так, так как кажется, что я не делаю ничего другого, чем образец MasterDetailApp, который, кажется, работает.
Подробнее здесь: [url]https://stackoverflow.com/questions/59123439/swiftui-holding-reference-to-deleted-core-data-object-causing-crash[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия