• 0

iOS measurement conversion app with picker


Question

I am building a simple measurement conversion tool (cups to ounces, tsp to tbsp) with a picker (I'd like to use a drop down, but no luck there).

My app launches. The picker populates with options from the datasource.

How ever when I select an option, the app crashes with the following console output


2012-12-10 09:26:41.068 Cooks Helper2[63484:11303] -[UIView text]: unrecognized selector sent to instance 0x7188720
(lldb)
[/CODE]

Here are my classes

[CODE]
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
<UIPickerViewDelegate, UIPickerViewDataSource>
@property (strong, nonatomic) NSArray *conversionType;
@property (strong, nonatomic) NSArray *conversionFactor;
@property (strong, nonatomic) IBOutlet UIView *picker;
@property (strong, nonatomic) IBOutlet UITextField *originalText;
@property (strong, nonatomic) IBOutlet UILabel *resultText;
- (IBAction)textFieldReturn:(id)sender;
@end
[/CODE]

[CODE]
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize picker, originalText, resultText;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_conversionType = @[@"Ounces to Cups", @"Cups to Ounces",
@"Teaspoons to Tablespoons", @"Tablespoons to Teaspoons"];

_conversionFactor = @[ @0.25f, @4.00f, @0.33f, @3.00f];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)textFieldReturn:(id)sender
{
[sender resignFirstResponder];
}
#pragma mark -
#pragma mark PickerView Datasource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return _conversionType.count;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return _conversionType[row];
}
#pragma mark -
#pragma mark PickerView Delegate
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
float factor = [_conversionFactor[row] floatValue];
float original = [originalText.text floatValue];
float result = original * factor;

NSString *resultString = [[NSString alloc] initWithFormat:
@"%.2f", result];
resultText.text = resultString;
}
@end
[/CODE]

Thanks for any help you can offer :)

5 answers to this question

Recommended Posts

  • 0

Okay, so I have the picker issue sorted out, I think. I did the referencing outlet incorrectly. Apparently, I had right clicked just outside of the text field, so it was a UIView object instead of a UITextField. My guess it was trying to pull the text attribute from the viewcontroller itself, which obviously, there is none. I have "remedied" that by correcting a new RO to viewcontroller.h and deleteing the old one, but now the application won't launch. Crashes with the following


Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<ViewController 0x13335740> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key originalText
[/CODE]

  • 0

You have an extra hook set up in your nib somewhere. Maybe you renamed an outlet property or something. Go to the connections tab (last one) on the right in IB and you should see whats up.

Thanks for the reply! Figured it out late last night. Thanks for your help!

  • 0

No problem. Is there a particular reason you are declaring a property and then only using the instance variable. For example:


- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return _conversionType.count;
}
[/CODE]

Ideally would be

[CODE]
- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return self.conversionType.count;
}
[/CODE]

This uses the getter created by the system when you declare a property.

  • 0

No problem. Is there a particular reason you are declaring a property and then only using the instance variable. For example:


- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return _conversionType.count;
}
[/CODE]

Ideally would be

[CODE]
- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return self.conversionType.count;
}
[/CODE]

This uses the getter created by the system when you declare a property.

No reason really. I'm actually pretty new to iOS programming, and used a tutorial online for parts of this. That was how it was written in the tutorial. Thanks for the input though. I appreciate it!

This topic is now closed to further replies.
  • Posts

    • Shocker! It would be crazy to be ready to introduce a "fold" phone but have no plans happening for a followup model.
    • XBOX is at the end of its generational life cycle and wasn't selling much anyway. They need to figure out the pricing for XBOX Helios. However, I'm not buying the DRAM shortage with AI preferring HBM. I think it's industry gouging.
    • Amazon Prime Day 2026: Best Dolby soundbar deals from Sony, Samsung, JBL, Polk, and more by Sayan Sen Yesterday we covered the JBL BAR 800 which is a 5.1.2 Dolby Atmos/Vision soundbar. The unit is on sale for its lowest ever price of just $800 making it a solid offer. However, there are many more options to choose from and in this article, we have made a compilation of the best deals including from Sony, Polk, Yamaha, Denon, Samsung and more. Sony's BAR models are currently at their lowest prices which makes them solid offerings. The company's BRAVIA Theatre Bar lineup is designed to suit different home cinema needs. The Bar 5 is an entry-level 3.1-channel soundbar with a wireless subwoofer, supporting Dolby Atmos®, DTS:X, S-Force PRO Front Surround, and Vertical Surround Engine for immersive audio with clear dialogue. The Bar 6 upgrades to a 3.1.2-channel configuration by adding dedicated up-firing speakers for more convincing overhead Atmos effects while retaining the wireless subwoofer. At the premium end, the Bar 7, Bar 8, and flagship Bar 9 are single-soundbar solutions featuring Sony’s 360 Spatial Sound Mapping technology, which creates phantom speakers for a wider surround field. Bar 7 includes nine speaker units, Bar 8 increases this to eleven, and Bar 9 offers thirteen speaker driver units promising the most expansive soundstage and acoustic performance. All models should integrate seamlessly with compatible BRAVIA TVs and support the BRAVIA Connect app for setup and control. Get them at the links below: Sony BRAVIA Theater Bar 9 Soundbar (HT-A9000): $998.00 (Amazon US) (Was: $1498) Sony BRAVIA Theater Bar 8 Soundbar (HT-A9000): $798.00 (Amazon US) (Was: $998) Sony BRAVIA Theater Bar 7 Soundbar (HT-A7100): $618.00 (Amazon US) (Was: $768) Sony BRAVIA Theater System 6: $548.00 | Sony BRAVIA Theater Bar 6: $448.00 Sony BRAVIA Theater Bar 5 (HT-B500): $278.00 (Amazon US) (Was: $348) Sony HT-S400 2.1 soundbar: $198.00 (Amazon US) (Was: $248) Aside from those, we also have more discounts including from Samsung, Polk Audio, and more: Samsung Q-Series Soundbar HW-QS90H 7.1.2: $797.99 (Amazon US) (Was: $998) Polk Audio Signa S4: $336.00 (Amazon US) (Was: $449) Hisense AX3120Q: $229.00 (Amazon US) (Was: $259) Check out more soundbar deals that you may like at this link. Good to know This Amazon deal is U.S. specific, and not available in other regions unless specified. We only use first-party seller links (at the time of article publishing); ensure that you purchase from a first-party seller link only. Check out Today's Deals on Amazon | or our recent tech deals. Become a Prime member (for Students or SNAP) via Neowin Get Prime Access - Prime for half price (for qualifying Medicaid, EBT, SNAP) Subscribe to Prime Video, Audible Plus, Music Unlimited or Kindle Unlimited via Neowin As an Amazon Associate, we earn from qualifying purchases.
  • Recent Achievements

    • Conversation Starter
      Admir earned a badge
      Conversation Starter
    • First Post
      The_Focal_Point earned a badge
      First Post
    • Apprentice
      daryld went up a rank
      Apprentice
    • Contributor
      Carltonbar went up a rank
      Contributor
    • One Month Later
      The_Focal_Point earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      418
    2. 2
      +Edouard
      170
    3. 3
      PsYcHoKiLLa
      130
    4. 4
      Xenon
      69
    5. 5
      neufuse
      69
  • Tell a friend

    Love Neowin? Tell a friend!