Как передать массивы в UIPickerView из одного класса в другой? - PullRequest
0 голосов
/ 29 августа 2011

Ба.Последние несколько дней я вырвал свои волосы из-за этой проблемы, но я знаю, что должен упускать из виду очевидное.Я сделал мои файлы PickerViewController (.h. / M) и PickerViewAppDelegate (.h / .m), и они прекрасно работают как отдельная программа, но я хотел бы, чтобы средство выбора появлялось после того, как в моей процедуре происходит событие "helloworld.m "файл.Я могу заставить сборщика появиться, но я не могу понять, как его заполнить, чтобы он не был пустым.Я ДУМАЮ, что все сделала правильно, пока не попытаюсь передать свой массив моему объекту выбора.Что я делаю неправильно?

PickerViewController.h

#import <UIKit/UIKit.h>

@interface PickerViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate> {

    IBOutlet UIPickerView *pickerView;
    NSMutableArray *scrollerData;
}
@property (nonatomic, retain) IBOutlet UIPickerView *pickerView;
@property (nonatomic, retain) NSMutableArray *scrollerData;

-(void)setScrollerData:(NSMutableArray *)array;
@end

PickerViewController.m

#import "PickerViewController.h"


@implementation PickerViewController
@synthesize pickerView, scrollerData;


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    self.pickerView.delegate = self;
    self.pickerView.dataSource = self;
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}


- (void)dealloc {
//  [arrayColors release];
    [super dealloc];
}

-(void)setScrollerData:(NSMutableArray *)array
{
    //[self.scrollerData arrayByAddingObjectsFromArray:array];
    scrollerData = array;
}

#pragma mark -
#pragma mark Picker View Methods

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {

    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {

    return [scrollerData count];
}

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

    return [scrollerData objectAtIndex:row];
}

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    NSLog(@"Selected Number: %@. Index of selected numbers: %i", [scrollerData objectAtIndex:row], row);
}

PickerViewAppDelegate.h

#import <UIKit/UIKit.h>

@class PickerViewController;

@interface PickerViewAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    PickerViewController *pvController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

PickerViewAppDelegate.m

#import "PickerViewAppDelegate.h"
#import "PickerViewController.h"

@implementation PickerViewAppDelegate

@synthesize window;


- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    pvController = [[PickerViewController alloc] initWithNibName:@"PickerView" bundle:[NSBundle mainBundle]];

    [window addSubview:pvController.view];

    // Override point for customization after application launch
    [window makeKeyAndVisible];
}


- (void)dealloc {
    [pvController release];
    [window release];
    [super dealloc];
}


@end

Helloworld.m

...
        UIView* view = [[CCDirector sharedDirector] openGLView];

        UIPickerView *pickerView=[[UIPickerView alloc] init];
        pickerView.frame=CGRectMake(100,100, 200, 200);



        NSMutableArray *arrayNumbers = [[NSMutableArray alloc] init];
        [arrayNumbers addObject:@"30"];
        [arrayNumbers addObject:@"31"];
        [arrayNumbers addObject:@"32"];
        [arrayNumbers addObject:@"33"];
        [arrayNumbers addObject:@"34"];
        [arrayNumbers addObject:@"35"];
        [arrayNumbers addObject:@"36"];

        [pickerView setscrollerData: arrayNumbers];//Should I be calling pickerView here or something else?


        [view addSubview: pickerView];
        pickerView.hidden=NO;
...

Ответы [ 2 ]

0 голосов
/ 29 августа 2011

Вы переопределили метод установки, сгенерированный @synthesize в PickerViewController, поэтому вы больше не сохраняете его.

Затем вы вызываете setScrollerData для вашего pickerView (это должно дать вам предупреждение или сбой, так как pickerView не отвечает на этот метод).

Вы не устанавливаете PickerViewController в качестве делегата или источника данных вашего представления выбора в helloworld.m.

Я не вижу, куда вписывается ваш код hello world. Похоже, он добавляет новое представление выбора, а не использует его из xib PickerViewController.Вы должны создать экземпляр pickerviewcontroller из вашего hello world и добавить его .view в качестве подпредставления или представить его как модальный контроллер представления, а не настраивать новое представление выбора.Затем вы можете передать свой массив экземпляру pickerviewcontroller.Заметьте, однако, что не является стандартным иметь отдельный контроллер представления для того, что по сути является подпредставлением, хотя я не очень разбираюсь в cocos2d, поэтому не знаю, нормально ли это при использовании этой инфраструктуры.

0 голосов
/ 29 августа 2011

Ну, я думаю, вы должны просто передать массив из класса HelloWorld в класс PickerViewController, используя свойство / синтезировать.

...