I have several popup buttons whose selected tag is saved in the user defaults (by binding the selected tag in the Bindings inspector). Now instead of saving an integer I would like to save a string value (for the simple reason that it makes the user defaults more "readable" and failsafe), but unfortunately didn't find a way to bind a popup button's selected identifier. Is there a solution to this problem?
Binding a NSPopupButton's selected identifier
549 Views Asked by Nickkk At
1
There are 1 best solutions below
Related Questions in COCOA
- In what context can we use an unqualified #selector() expression in Swift?
- How can I trigger macOS system gamepad API based on a value received from iOS app through core bluetooth
- Using sort descriptors in Outline View
- NSTableView to NSOutlineView Drag & Drop not accepting drop
- How to remove horizontal line in bottom of section NSTableView?
- CGSRegionRef: How is an arbitrary region represented as union of rects?
- Listen for Touch Events on MacOS (Trackpad)
- Window "yanks" when moving
- Writing NSFilePromiseProviders to pasteboard blocks app on quit
- Basic ImGui program doesn't render, leaks memory and crashes
- NSTokenField suggestion using context menu in swift
- How to link multiple text views to a single text storage in TextKit 2
- I would like to know why I’m not getting IBOutlets connected in an App’s window
- How to make a custom event loop in Cocoa?
- Why is restoreWindow(withIdentifier:state:) called after applicationDidFinishLaunching(_:)?
Related Questions in COCOA-BINDINGS
- Bindings working from IB, not from my addObserver...
- Binding an NSTableView to an array of strings in Swift
- Is it possible to use cocoa bindings with NSTableView and Many-to-Many relationships
- Can't programmatically bind NSImageView in view-based NSTablveView cellView
- NSPasteboard ops working but not DnD
- binding not removed before view dealloc
- Localizing Mac XIB/Storyboard binding patterns for text
- NSBrowser not Repopulating children from NSTreeController after File Load via Core Data
- Need to use second window using Cocoa Bindings and Core Data in Swift
- Cocoa bindings not updating in reverse
- how to bind NSManagedObject properties to another window's table?
- NSValueTransformer can I add more objects to the bound array?
- NSTreeController addChild: does not call newObject but add: does (Class/Object mode)
- Restoring Core Data Master-Detail selections across runs
- auto launch Cocoa app when removable storage connected
Related Questions in NSPOPUPBUTTON
- Swift: Why does "Pop Up Button" throw NSInternalInconsistencyException?
- How to customize a NSPopUpButton and its NSMenu?
- How do I automatically reduce the width of an NSPopUpButton to the currently shown text's width?
- Can I add extra information to NSPopUpButton items in Xamarin.Mac?
- Custom nspopupbutton title when using bindings and struct
- How to draw NSPopupButtonCell highlighted image
- Objective-C, NSPopMenuButton & NSMenu Color
- How to make `NSPopUpButton` with `NSControl.ControlSize.mini` programmatically?
- Setting Programmatic Actions for NSPopUpButton
- Binding a NSPopupButton's selected identifier
- NSPopUpButton - Weird behavior when populating dynamic content with Cocoa Binding
- How can you add more than 3 items to an NSPopUpButton?
- Buggy NSPopupButton in Cocoa MacOS Swift/Objective-C doesn't allow user to select first item
- Swift NSPopUpButton enum
- binding NSPopupbutton to an array of classes
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
The bindings for
NSPopupButtoncan be a little confusing. The various Content* bindings are used to provide the button with its list of possible selections.Contentitself is used to provide a list of objects represented by the items in the pop up button.Content Valuesis used to provide the actual values displayed in the pop up button. For example,Contentmight be bound to an array of model objects, whileContent Valuesis bound to a specific key path on those objects, for examplename, because you want to display the value of the name property of each item in the popup button itself.Similarly, the bindings for selection correspond to this system.
Selected Objectmeans that when a given item is selected, the underlying full object from theContentarray will be selected/set on the bound property, not just the simple displayed string (or number, etc.) value. On the other hand,Selected Valuewill indeed bind just the displayed value.Taken together, and in your case, where you're not using the content bindings, this means that you have two options:
Selected Valueto user defaults.identifierproperty and aname(or whatever you want to call it) property. Bind theContentbinding to an array of those objects, and theContent Valuesbinding tothatArray.name.Option 1
This option is much simpler. Just set up the selected values binding and you're done. It has the major disadvantage that the actual displayed string is the thing being stored in user defaults. This means that if you change the wording of an item, that previously stored selection won't be restored, even if it corresponds directly to the newly-worded item. More importantly, it's not a good idea to make localized -- or potentially localized -- strings semantically important.
Option 2
This takes a little more work (and code), but it would solve your problem in a robust, "correct" way. For example:
Bind:
Contentto ViewController -optionsForPopup.Content Valuesto ViewController -optionsForPopup.name.Selected Valueto Shared User Defaults Controller - Controller Key:values, Model Key Path:WhateverUserDefaultsKeyYouWant.Example
I've created an example project that implements option 2 here: https://github.com/armadsen/PopupDemo