Post

Replies

Boosts

Views

Activity

View doesn't update during 'for await...'
In this simple example, no matter what I try, I cannot get the UI to update while the lines of the stream are being read. Not until the entire stream is finished does the UI update. This happens for the built in AsyncSequence or my custom one. (I am simulating a delay, but regardless of whether or not I use it, I don't get incremental updates.) struct ContentView: View { @State var entries: [String] = [] var body: some View { List { ForEach(entries, id: \.self) { entry in Text(entry) } } .task { do { let (bytes, _) = try await URLSession.shared.bytes(from: URL(string: "https://itunes.apple.com/us/rss/toppodcasts/limit=1/explicit=false/genre=1301/json")!) for try await line in bytes.lines { await update(line) await mySleep(1) } } catch { print("Error") } } } func update(_ line: String) async { entries.append(line) } func mySleep(_ seconds: Int) async { sleep(UInt32(seconds)) } }
0
0
849
Jun ’21
Compile errors with package in Release mode w/CoreData resources
I get a ton of compile errors when I compile in Release mode (i.e. Archive) my swift package that contains my CoreData .xcdatamodel file. Works fine in debug mode, but when archiving, I get tons of “error reading dependency file…unexpected character in prerequisites at position…” errors. Same errors as this issue: https://developer.apple.com/forums/thread/657264 If I move the .xcdatamodel to the main project (out of the package), then it's all good again, but I'd like to keep the database model file inside the package if possible.
3
0
2.1k
Aug ’20
@FetchResults doesn't refresh view when updating related fields
If I query an entity with a relationship to another entity, and then I update that related entity, the view does not refresh automatically. I'm 'forcing' it now, but that doesn't seem right. What's the right way? See code sample: struct ContentView: View { &#9;&#9;@Environment(\.managedObjectContext) private var viewContext &#9;&#9;@FetchRequest( &#9;&#9;&#9;&#9;sortDescriptors: [], &#9;&#9;&#9;&#9;animation: .none) &#9;&#9;private var categories: FetchedResults<Category> &#9;&#9;private func forceRefresh() { &#9;&#9;&#9;&#9;viewContext.refresh(categories[0], mergeChanges: true) &#9;&#9;} &#9;&#9;var body: some View { &#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;VStack { &#9;&#9;&#9;&#9;&#9;&#9;List { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;ForEach(categories) { category in &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Section { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Text("\(category.name!)").font(.title) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;ForEach(category.items?.allObjects as! [Item]) { item in &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Button { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;item.name = "\(UUID())" &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} label: { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Text("\(item.name!)").font(.caption) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;Divider() &#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;Button { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;forceRefresh() &#9;&#9;&#9;&#9;&#9;&#9;} label: { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Text("Force Refresh").foregroundColor(.blue) &#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;} &#9;&#9;} }
1
0
1.5k
Aug ’20