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()
}
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
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.
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
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")
}
}
}
}
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
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)
}
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)
}
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?