Post

Replies

Boosts

Views

Activity

Changing property causes detail view to pop back to list view
I have a list view created from core data, and it's sectioned by a property called favourite. In the detail view a user is able to either add an item or remove it as a favourite. When the property is updated, it causes the detail view to pop back to the list view, which I don't want it to do, and don't know how to get it to not do that The creation of the list @SectionedFetchRequest var dims: SectionedFetchResults<Int16, DIM> init() { _dims = SectionedFetchRequest<Int16, DIM>( sectionIdentifier: \.favourite, sortDescriptors: [NSSortDescriptor(keyPath: \DIM.favourite, ascending: false), NSSortDescriptor(keyPath: \DIM.name, ascending: true)] ) } List { ForEach(dims) { section in let header: String = nameForSectionHeader(sectionID: section.id) Section(header: Text(header)) { ForEach(section) { dim in NavigationLink(destination: DIMListView(dim: dim)) { } } } } } and then on the detail view there's a toolbar with an option to add/remove favourite. .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button("Options") { showingAlertFav = true } .alert("Choose an option", isPresented: $showingAlertFav) { if dim.favourite == 0 { Button("Favourite", role: .none) { setFav(fav: 1) } } else { Button("Unfavourite", role: .none) { setFav(fav: 0) } } } } } func setFav(fav : Int16) { dim.favourite = fav saveContext() }
0
0
430
May ’23
Xcode git keeps complaining of unsaved changes
Xcode keeps complaining about changes when I try and commit, I get the error "The local repository is out of date." When I try and pul changes from the remote, I get the message "Your local repository has uncommitted changes that need to be stashed before you can continue. " When I try and commit, every time it shows a UserInterfaceState.xcuserstate file. if I try and commit it I get the local repository error.
1
0
1.4k
May ’23
SwiftUI Cell Background colour - don't fill full cell
I'm looking to see if its possible to change the background colour of a cell, but fill it based on a percentage I'm creating the cell in a List {} let gradient = LinearGradient(colors: [.green, .white], startPoint: .leading, endPoint: .trailing) List { Section(header: Text("Total")) { Text("Total Obtained: \(totalObtained) - \(totalComplete)%") .listRowBackground(gradient) } } totalComplete has the percentage variable
0
0
524
Apr ’23
Updating from Navigation view to NavigationStack
I'm currently using a navigationview and am now getting an warning 'init(destination:tag:selection:label:)' was deprecated in iOS 16.0: use NavigationLink(value:label:) inside a List within a NavigationStack or NavigationSplitView I'm trying to move to another view from a button (there will be several hence using tags) but I can't seem to get my head around how to do it. The code I currently have var body: some View { List { NavigationLink(destination: ProjectColourAddView(project: project), tag: 1, selection: $action) { EmptyView() } Group { Button(action: { self.showImageMenu = true }) { Text("New Title Image") } .confirmationDialog("Select Image Source", isPresented: $showImageMenu, titleVisibility: .visible) { Button("Take Photo") { self.isShowCamera = true } Button("Choose from Albums") { self.isShowPhotoLibrary = true } } Button(action: { self.action = 3 NSLog("More Images") }) { Text("More Images (x)") } Button(action: { self.action = 2 NSLog("Add Image") }) { Text("Add Image") } Button(action: { self.action = 1 NSLog("Colour List") }) { Text("Colour List") } } } }
2
0
663
Apr ’23
Check if data exists in cloud kit
My App does some importing when its first setup. I have it set to store core data in cloud kit. My issue is if you run it on one device, everything imports fine. Run it on a second, and it will import for a second time, duplicating the records. I'm trying to see if there's a way of checking if there is anything in cloud kit before running the import, but I'm always getting back false, even if I know there are records. The code I'm using to check is NSLog("Existance Check") checkIfExistsInCloudKit() { (result) in print(result) if result == false { NSLog("Does Not Exist") //let ImportData : ImportData = ImportData(viewContext: viewContext) //ImportData.importAll() } else { NSLog("Does Exist") } } NSLog("Existance Check Complete") and the function is func checkIfExistsInCloudKit(_ completion: @escaping (Bool) -> ()) { var result = false let container = CKContainer(identifier: "******") let privateDB = container.privateCloudDatabase let predicate = NSPredicate(format: "CD_brand = %@", "DMC") let query = CKQuery(recordType: "CD_Colour", predicate: predicate) privateDB.perform(query, inZoneWith: nil) { records, error in //guard let records = records else { return } result = true } completion(result) } 2023-04-15 14:07:28.092262+0100 Stitchers Companion[4553:113693] Existance Check false 2023-04-15 14:07:28.092897+0100 Stitchers Companion[4553:113693] Does Not Exist 2023-04-15 14:07:28.092962+0100 Stitchers Companion[4553:113693] Existance Check Complete
1
1
944
Apr ’23
Change List row background colour programatically
I'm trying to change the background colour of a row in a list based on a value I have an Int16 value stored in card.owned and I want to change the background if this value is above 0, otherwise use the normal background. Previously with a table view I could change it with the cellForRowAtIndexPath method, but not sure how to do it with SwiftUI without changing every row Currently I have ForEach(cards) { section in let header: String = nameForSectionHeader(sectionID: section.id) Section(header: Text(header)) { ForEach(section) { card in NavigationLink(destination: CardView(card: card)) { VStack(alignment: .leading) { if let name = card.name, let id = card.cardID { Text("\(id) - \(name)") } if let set = card.set, let setName = set.name { Text("Set: \(setName)") } if card.owned > 0 { Text("Owned: \(card.owned)") } } } } } } .listRowBackground(lightGreen) }
0
0
496
Sep ’22
Filtered list when going back from pushed view
I have the below code for my view's body Currently when I go to the ItemDetailView View and then press back to return to this view, the filtered list is no longer there, it's back the full view. How to I get it to keep the filtered list when I go back? The text is still in the search bar         NavigationLink(destination: ItemAddView(series: series), isActive: $noItemsShowing) { EmptyView() }         List {             ForEach(items) { item in                 NavigationLink(destination: ItemDetailView(item: item)) {                     Text(fullItemName(item: item))                 }             }         }         .searchable(text: $searchText)         .onSubmit(of: .search) {             items.nsPredicate = NSPredicate(format: "series = %@", series)             if(!searchText.isEmpty) {                 items.nsPredicate = NSPredicate(format: "series = %@ AND amount > 0 AND name CONTAINS[cd] %@", series, searchText)             }         }         .onChange(of: searchText) { _ in             items.nsPredicate = NSPredicate(format: "series = %@", series)             if(!searchText.isEmpty) {                 items.nsPredicate = NSPredicate(format: "series = %@ AND amount > 0 AND name CONTAINS[cd] %@", series, searchText)             }         }         .navigationBarTitle("\(series.name ?? "Error") Items", displayMode: .inline)     }
2
0
631
May ’22
Cloud Kit - Synching image
I'm currently sharing data between devices using core data and cloud kit.Currently I have a "Picture" entity which stores the filename, the date it was added and a relation to another entity.The details in core data successfully syncs, how would I go about syncing the image file. The file is saved in the documents folder and I can get its file path usinglet imagePath = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(imageName)Research seems to show I need to use CKAsset to upload/download the file but how do I go about doing this?
3
0
2.2k
May ’21