Почему этот NSMutableArray не заполняется? - PullRequest
0 голосов
/ 27 августа 2010

У меня есть NSMutableArray Я пытаюсь заполнить, используя for-loop и набираю NSStrings для него. Это должно быть источником данных для моего UIPickerView. Вы увидите несколько закомментированных строк, где я вручную сделал NSArrays, и они показались нормально, но мой for-loop NSMutableArray, похоже, не принимает строки, которые я делаю. NSLogs показывает, что я исправляю строку (и эквивалент float), но NSLogs, извлекающие значения из NSMutableArray, отображаются как null и 0.0

Интерфейс ...


//  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

1 Ответ

3 голосов
/ 27 августа 2010

Вы где-нибудь инициализируете свои массивы?Я не вижу [[NSMutableArray alloc] init] нигде.Отправка сообщения нулевому объекту запрещена, поэтому вполне вероятно, что эти addObjects отправляются нулевым и ничего не делают.

...