2010-08-27 53 views
0

我有一個NSMutableArray我想填充使用for-loop併爲其製作NSStrings。這些將成爲我的UIPickerView的數據源。您會看到一些註釋掉的行,我手動製作了NSArrays,並且它們顯示正常,但我的for-loopNSMutableArray似乎不接受我製作的字符串。該NSLogs證明我做的字符串(和等效float)好了,但NSLogsNSMutableArray拉動值顯示爲null0.0爲什麼不是這個NSMutableArray得到填充?

接口...


// PoolSizePickerViewController.h 

#import <UIKit/UIKit.h> 
#define kLengthComponent 0 
#define kWidthComponent 1 
#define kDepthComponent 2 

@protocol PoolSizePickerViewControllerDelegate; 

@interface PoolSizePickerViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> { 
    UIPickerView *poolSizePicker; 
    float length, width, depth; 
    NSMutableArray *lengthStrings, *widthStrings, *depthStrings; 
    NSMutableArray *lengthFloats, *widthFloats, *depthFloats; 
    NSString *pickerType; 
    NSString *pickerDescription; 
    UIButton *selectButton; 
    UIButton *cancelButton; 
    UILabel *pickerTitleLabel; 
    UITextView *pickerDescriptionLabel; 
    id <PoolSizePickerViewControllerDelegate> delegate; 
} 

@property (nonatomic, retain) IBOutlet UIPickerView *poolSizePicker; 
@property float length, width, depth; 
@property (nonatomic, retain) NSMutableArray *lengthStrings, *widthStrings, *depthStrings; 
@property (nonatomic, retain) NSMutableArray *lengthFloats, *widthFloats, *depthFloats; 
@property (nonatomic, retain) NSString *pickerType; 
@property (nonatomic, retain) NSString *pickerDescription; 
@property (nonatomic, retain) IBOutlet UIButton *selectButton; 
@property (nonatomic, retain) IBOutlet UIButton *cancelButton; 
@property (nonatomic, retain) IBOutlet UILabel *pickerTitleLabel; 
@property (nonatomic, retain) IBOutlet UITextView *pickerDescriptionLabel; 
@property (assign) id <PoolSizePickerViewControllerDelegate> delegate; 

- (IBAction)selectedSelectButton; 
- (IBAction)selectedCancelButton; 

@end 

@protocol PoolSizePickerViewControllerDelegate <NSObject> 

@optional 

- (void)poolSizePickerViewController:(PoolSizePickerViewController *)controller 
       didSelectLength:(float)length 
         andWidth:(float)width 
         andDepth:(float)depth; 

- (void)poolSizePickerViewController:(PoolSizePickerViewController *)controller 
       didSelectCancel:(BOOL)didCancel; 

@end 

和實現...


// PoolSizePickerViewController.m 

#import "PoolSizePickerViewController.h" 

@implementation PoolSizePickerViewController 

@synthesize poolSizePicker; 
@synthesize length, width, depth; 
@synthesize lengthStrings, widthStrings, depthStrings; 
@synthesize lengthFloats, widthFloats, depthFloats; 
@synthesize delegate; 
@synthesize pickerType, pickerDescription; 
@synthesize selectButton, cancelButton; 
@synthesize pickerTitleLabel; 
@synthesize pickerDescriptionLabel; 

- (IBAction)selectedSelectButton { 
    NSInteger lengthRow = [poolSizePicker selectedRowInComponent:kLengthComponent]; 
    NSInteger widthRow = [poolSizePicker selectedRowInComponent:kWidthComponent]; 
    NSInteger depthRow = [poolSizePicker selectedRowInComponent:kDepthComponent]; 
    length = [[self.lengthFloats objectAtIndex:lengthRow] floatValue]; 
    width = [[self.widthFloats objectAtIndex:widthRow] floatValue]; 
    depth = [[self.depthFloats objectAtIndex:depthRow] floatValue]; 
    if ([self.delegate respondsToSelector:@selector (poolSizePickerViewController:didSelectLength:andWidth:andDepth:)]) { 
     [self.delegate poolSizePickerViewController:self didSelectLength:length andWidth:width andDepth:depth]; 
    } 
} 

- (IBAction)selectedCancelButton { 
    if ([self.delegate respondsToSelector:@selector (poolSizePickerViewController:didSelectCancel:)]) { 
     [self.delegate poolSizePickerViewController:self didSelectCancel:YES]; 
    } 
} 


- (void)viewDidLoad { 
    for (int footIndex = 6; footIndex < 40; footIndex ++) { 
     for (int inchIndex = 0; inchIndex < 2; inchIndex ++) { 
      [self.lengthStrings addObject:[NSString stringWithFormat:@" %d' %d\"", footIndex, inchIndex * 6]]; 
      NSLog(@" %d' %d\"", footIndex, inchIndex * 6); 
      NSLog(@" -%@", [self.lengthStrings objectAtIndex:footIndex - 6]); 
      [self.lengthFloats addObject:[NSNumber numberWithFloat:(float)footIndex + (float)inchIndex * 0.5f]]; 
      NSLog(@" %1.1f", (float)footIndex + (float)inchIndex * 0.5f); 
      NSLog(@" -%1.1f", [[self.lengthFloats objectAtIndex:footIndex - 6] floatValue]); 
     } 
    } 
    for (int footIndex = 6; footIndex < 40; footIndex ++) { 
    for (int inchIndex = 0; inchIndex < 2; inchIndex ++) { 
      [self.widthStrings addObject:[NSString stringWithFormat:@" %d' %d\"", footIndex, inchIndex * 6]]; 
      [self.widthFloats addObject:[NSNumber numberWithFloat:(float)footIndex + (float)inchIndex * 0.5f]]; 
     } 
    } 
    for (int footIndex = 1; footIndex < 16; footIndex ++) { 
     for (int inchIndex = 0; inchIndex < 2; inchIndex ++) { 
      [self.depthStrings addObject:[NSString stringWithFormat:@" %d' %d\"", footIndex, inchIndex * 6]]; 
      [self.depthFloats addObject:[NSNumber numberWithFloat:(float)footIndex + (float)inchIndex * 0.5f]]; 
     } 
    } 

// lengthStrings = [NSArray arrayWithObjects:@" 6' 0\"", nil]; 
// lengthFloats = [NSArray arrayWithObjects:[NSNumber numberWithFloat:1.0], nil]; 
// widthStrings = [NSArray arrayWithObjects:@" 6' 0\"", nil]; 
// widthFloats = [NSArray arrayWithObjects:[NSNumber numberWithFloat:2.0], nil]; 
// depthStrings = [NSArray arrayWithObjects:@" 1' 0\"", nil]; 
// depthFloats = [NSArray arrayWithObjects:[NSNumber numberWithFloat:3.0], nil]; 

    UIImage *buttonImageNormal = [UIImage imageNamed:@"whiteButton.png"]; 
    UIImage *stretchableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 
    [selectButton setBackgroundImage:stretchableButtonImageNormal forState:UIControlStateNormal]; 
    [cancelButton setBackgroundImage:stretchableButtonImageNormal forState:UIControlStateNormal]; 
    UIImage *buttonImagePressed = [UIImage imageNamed:@"blueButton.png"]; 
    UIImage *stretchableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 
    [selectButton setBackgroundImage:stretchableButtonImagePressed forState:UIControlStateHighlighted]; 
    [cancelButton setBackgroundImage:stretchableButtonImagePressed forState:UIControlStateHighlighted]; 
    pickerTitleLabel.text = [NSString stringWithFormat:@"Select a Pool %@", pickerType]; 
    pickerDescriptionLabel.text = self.pickerDescription; 
    self.poolSizePicker.showsSelectionIndicator = YES; 
    [super viewDidLoad]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
} 

- (void)dealloc { 
    [super dealloc]; 
} 

    #pragma mark - 
    #pragma mark Picker Data Source Methods 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
return 3; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    switch (component) { 
     case kLengthComponent: 
      return [self.lengthStrings count]; 
      break; 
     case kWidthComponent: 
      return [self.widthStrings count]; 
      break; 
     default: 
      return [self.lengthStrings count]; 
      break; 
    } 
} 

#pragma mark Picker Delegate Methods 

- (NSString *)pickerView:(UIPickerView *)pickerView 
     titleForRow:(NSInteger)row 
     forComponent:(NSInteger)component { 
    switch (component) { 
     case kLengthComponent: 
      return [self.lengthStrings objectAtIndex:row]; 
      break; 
     case kWidthComponent: 
      return [self.widthStrings objectAtIndex:row]; 
      break; 
     default: 
      return [self.depthStrings objectAtIndex:row]; 
      break; 
    } 
} 

@end 

回答

3

你正在初始化你的數組?我沒有在任何地方看到[[NSMutableArray alloc] init]。向空對象發送消息是無操作的,所以很可能這些addObjects被髮送到空值並且沒有任何操作。

+0

這很有道理。我已經儘可能少地限制了自己的'alloc'!但是它如何與手動數組一起工作呢?與[NSArray arrayWithObjects:]'相對,'[NSMutableArray addObject:]'有什麼不同嗎?而不是'@property(nonatomic,retain)'初始化它們?我會在'viewDidLoad'中嘗試'alloc'和'init',然後在'dealloc'中釋放它們... – Steve 2010-08-27 02:34:23

+1

@Steve,[NSArray arrayWithObjects:]等於[[[NSArray alloc] initWithObjects:] autorelease]。 – vfn 2010-08-27 03:04:36

+0

男孩我希望有一個什麼得到autoreleased參考!我花了很多時間在Apple文檔中,但是我沒有提及那裏的autorelease狀態。謝謝! – Steve 2010-08-27 04:07:00