Post

Replies

Boosts

Views

Activity

Reply to Companion Xcode project
To Clarify, the projects I am Looking for are from WWDC2023-10154. The video says download but no link, Is the link gone after initial play? Thanks "This is a code-along. During this session, I will be building an app with you. Hit pause now, and download the companion Xcode projects: an archive with the prepared starting point, and the finished one. Open the starter project, and go to the ContentView file"
Jun ’23
Reply to Progress Indicator not working as expected
I tried a couple of things using a separate thread but still no luck. Below is my latest try? I must be missing something basic with this in seems to be very straightforward? @IBAction func progressStart(_ sender: Any) { // Start the progress animation progressIndicator.startAnimation(self) // Do some work here... let dispatchGroup = DispatchGroup() dispatchGroup.enter() DispatchQueue.global(qos: .background).async { var progress: Double = 0.0 for _ in 0..<100 { // Update the progress value in a loop progress += 1.0 DispatchQueue.main.async { self.progressLabel.stringValue = String(progress) self.progressIndicator.doubleValue = progress / 100.0 } // Do some work here... } dispatchGroup.leave() } dispatchGroup.notify(queue: DispatchQueue.main) { // Stop the progress animation self.progressIndicator.stopAnimation(self) } } }
Jun ’23
Reply to macOS Xcode 14.2 app applicationwillterminate function is not called
I got it working. I did need to set Application can be killed immediately when user is shutting down or logging out" setting to NO to the target using the INFO tab but I had a coding error implementing applicationWillTerminate. So, here is how my app delegate looks now. import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate {         func applicationWillFinishLaunching(_ notification: Notification) {     }     func applicationDidFinishLaunching(_ aNotification: Notification) {         // Insert code here to initialize your application           //    try! DatabaseManager.setup(for: NSApp)     }     func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {         return true     }     func applicationWillTerminate(_ Notification: Notification) {         // Insert code here to tear down your application         getPrefs()         if paymePref.prefAutoBackup == "Yes" {             backupDataBase()         }     } }
Jan ’23
Reply to How to add an IBAction to a macOS tableView Cell
import Cocoa class CustomTableCell: NSTableCellView {     @IBOutlet weak var userNameLabel: NSTextField!     @IBOutlet weak var roleLabel: NSTextField!    @IBOutlet var testTextView: NSTextView!     override func draw(_ dirtyRect: NSRect) {         super.draw(dirtyRect)         // Drawing code here.     }     @IBAction func emailButton(_ sender: Any) {         // Email user     } } I was first trying to add a @IBAction for a scrollview and when I control drag the scrollview to the CustomTableCell file I could not create and @IBAction. It is like having a scrollview object inside a scrollable table view is not allowed. So, I was not able to create an action to get the contents of the scrollview in the ViewController code. Much less creating code to pass to the viewController the contents of the scrollView text entered. I sent a offline demo project to illustrate what I am saying. Thanks for your help on this.
Nov ’22
Reply to NSPredicate format for date comparison
I figured this out. I had to create a date from the search string to use in the predicate>>> Here is the working code:     @objc func invoiceSearch(sender:NSSearchField) {   let searchString = sender.stringValue         let dateFormatter = DateFormatter()         dateFormatter.dateFormat = "YYYYMMdd"         var dateTemplate: String = "20000101"         var dateSearch: String = ""         var dateEndSearch: String = ""         dateFormatter.locale = Locale(identifier: "en_US_POSIX")         var predicate:NSPredicate = NSPredicate()         if searchString.isEmpty {             invoices = self.backUpInvoices         }         else{       // search field contains data             if searchString.isContainsLetters == false {     // If false must be a date search (Numerics or -)                 dateSearch = dateTemplate                    // Code to handle a begin and end date in                 if searchString.count < 9 {                  // the format YYYYMMDD-YYYYMMDD initially end date is                     dateSearch.removeFirst(searchString.count) // set to current date                     dateSearch = searchString + dateSearch                     searchBeginDate = dateFormatter.date(from: dateSearch)!                 }                 else {                     if searchString.count > 9 {                         dateSearch.removeFirst(searchString.count-9)                         dateEndSearch = searchString                         dateEndSearch.removeFirst(9)                         dateSearch = dateEndSearch + dateSearch                         searchEndDate = dateFormatter.date(from: dateSearch)!                     }                 }             }             if (invoiceSearchField.cell as? NSSearchFieldCell)?.placeholderString == "All" {                 predicate = NSPredicate(format: "invoiceNumber contains %@ OR invoiceCustName contains %@ OR invoiceStatus contains %@ OR invoiceDateCreated >= %@ AND invoiceDateCreated < %@",searchString,searchString,searchString,searchBeginDate as NSDate, searchEndDate as NSDate)             }             else if (invoiceSearchField.cell as? NSSearchFieldCell)?.placeholderString == "invoice Number" {                 predicate = NSPredicate(format: "invoiceNumber contains %@",searchString)             }             else if (invoiceSearchField.cell as? NSSearchFieldCell)?.placeholderString == "invoice Customer"{                 predicate = NSPredicate(format: "invoiceCustName contains %@",searchString)             }             else if (invoiceSearchField.cell as? NSSearchFieldCell)?.placeholderString == "invoice Status"{                 predicate = NSPredicate(format: "invoiceStatus contains %@",searchString)             }             else if (invoiceSearchField.cell as? NSSearchFieldCell)?.placeholderString == "Invoice Date"{                 predicate = NSPredicate(format: "invoiceDateCreated >= %@ AND invoiceDateCreated < %@", searchBeginDate as NSDate, searchEndDate as NSDate)             }             invoices = (self.backUpInvoices as NSArray).filtered(using: predicate) as! [Invoice]         }
Sep ’22