I am getting a strange crash (see call stack in attached screenshot). I am looking for ideas/hints how to track down what the issue is?
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hi,
I am using a child NSManagedContext trying to isolate changes to a NSManagedObject from changes done to the same object in the parent NSManagedObjectContext.
This works fine for normal properties, but any changes to relationships performed on the object in the parent context will show up immediately in the child object as well.
Is this the intended behavior? If yes is there a way to create an "isolated" version of an NSManagedObject?
Thanks in advance for any hints!
Cheers, Michael
Hi,
having the concurrency checks (-Xfrontend -warn-concurrency -Xfrontend -enable-actor-data-race-checks-Xfrontend -warn-concurrency -Xfrontend -enable-actor-data-race-checks) enabled I always get this warning, when trying to access/use an actor in a SwiftUI .task:
"Cannot use parameter 'self' with a non-sendable type 'ContentView' from concurrently-executed code".
What would be a correct implementation?
Here's a minimal code-sample which produces this warning:
import SwiftUI
struct ContentView: View {
@State var someVar = 5
var a1 = A1()
var body: some View {
Text("Hello, world!")
.padding()
.task {
await a1.doSomething()
}
}
}
public actor A1 {
func doSomething() {
print("Hello")
}
}
Hi,
I am trying my first SwiftData migration, but my custom migration stage never gets called.
Since I am not sure if this is a bug with the current beta of if I am "holding it wrong" I was wondering, if anybody got migration working (their MigrationStage.custom called)? Would be great, if you could just let me know, if you got it working or running into the same issue! :-)
Thank you!
Cheers, Michael
Hi,
is there any description/documentation about what can not be used as SwiftData attributes?
I do not mean things which cause issues at compile time, like having a type which is not Codeable. But rather I am looking for info which things to avoid, if you do not want to run into application crashes in modelContext.save(). Like for example having an enum which as an optional associated value as an attribute type (crashes on save is the associated value is nil).
Anybody seen any documentation about that? Or tech notes?
Thanks in advance for any hints :-).
Cheers, Michael
Hi,
when generating thumbnails I sometimes see the error "QLThumbnailErrorDomain Code=110". This happens to files which can be processed when trying again, so it is not an issue with the files in general. I could not find an error with that code here.
Any ideas where to look and/or what causes this?
Thanks, Michael
Hi,
I encountered the issue, that unless an inverse relationship is modelled, the relationship is not persisted. This can be reproduced with the sample code below:
Press the "Add Person" button twice
Then press the "Add group" button
You now can see that the group has to member, but once you restart the app the members a gone. Once an inverse relationship is added (see commented code) the relationships are persisted.
Any idea if this is intended behaviour?
import SwiftData
import SwiftUI
// MARK: - Person -
@Model
class Person {
var name: String
// uncomment to make it work @Relationship(.nullify) var group: Group?
init(name: String) {
self.name = name
}
}
// MARK: - Group -
@Model
class Group {
var name: String
// uncomment to make it work @Relationship(.nullify, inverse: \Person.group) public var members: [Person]
@Relationship(.nullify) public var members: [Person] // comment to make it work
init(name: String) {
self.name = name
}
}
// MARK: - SD_PrototypingApp -
@main
struct SD_PrototypingApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: [Person.self, Group.self])
}
}
// MARK: - ContentView -
struct ContentView: View {
@Environment(\.modelContext) private var modelContext
@Query private var groups: [Group]
@Query private var persons: [Person]
var body: some View {
VStack {
ForEach(groups) { group in
Text("\(group.name): \(group.members.count)")
}
ForEach(persons) { person in
Text("Person: \(person.name)")
}
Button {
assert(persons.isEmpty == false)
if groups.isEmpty {
let group = Group(name: "Group A")
group.members = persons
modelContext.insert(group)
try! modelContext.save()
}
} label: {
Text("Add a group")
}
.disabled(!groups.isEmpty || persons.isEmpty)
Button {
let person = Person(name: "Person \(Int.random(in: 0 ... 1_000_000))")
modelContext.insert(person)
} label: {
Text("Add Person")
}
}
}
}