Here is what I did to get it working, although it isn't what I wanted it does work, in case anyone else is attempting to pull from cloudkit+core data public db and has run into issues with the initial, on-launch, fetch -- This is how I got FetchRequest in SwiftUI working with my need to do additional things with those items as they are pulled into the app.
In body of the main view, I call my model when the NavigationItem is being created, and ask it to finish setup for the current item.
NavigationLink(destination: ItemDetailView(detailViewModel: ItemDetailViewModel(item: item, pairedFavorite: self.itemModel.pairedFavoriteForItem(cloudItem: Item), manager: self.itemModel))) { Text(item.name)
And in the model, I have this method
var fetchedAlreadyFavoritesReturnedEntities: Bool?
func pairedFavoriteForItem(cloudItem: Item) -> FavoriteItem {
if allItems.contains(s) == false {
self.allItems.append(cloudItem)
}
if self.fetchedAlreadyFavoritesReturnedEntities == nil && self.allFavoriteItemObjects.isEmpty == true {
let request = NSFetchRequest<FavoriteItem>(entityName: "FavoriteItem")
request.sortDescriptors = [NSSortDescriptor(key: "favoritedState", ascending: true)]
let favoriteRequestFRC = NSFetchedResultsController(fetchRequest: request,
managedObjectContext: self.localManagedObjectContext,
sectionNameKeyPath: nil,
cacheName: nil)
favoriteRequestFRC.delegate = self
try? favoriteRequestFRC.performFetch()
let fetched: [FavoriteItem]? = favoriteRequestFRC.fetchedObjects
if let f = fetched {
self.allFavoriteItemObjects = Set<FavoriteItem>(f)
}
self.fetchedAlreadyFavoritesReturnedEntities = true
}
let results = self.allFavoriteItemObjects.filter {
return ($0.matchingItemUUID!.uuidString == cloudItem.uuid!.uuidString)
}
if results.isEmpty == false {
if let fave: FavoriteItem = results.first {
s.isFavorite = fave.favoritedState
}
return results.first!
}
else {
let newFavorite = self.makeFavoriteWithItem(cloudItem)
self.allFavoriteItemObjects.insert(newFavorite)
return newFavorite
}
}