0

データ型の Web サービスから成功した結果が得られましたが、コンテンツの結果をオブジェクトNSMutableArrayに表示するにはどうすればよいかというジレンマがあります。UIPickerViewこれを実行したとき、 には何も表示されませんでしUIPickerViewたが、ボタンをクリックすると、Web サービス コンテンツから最初の国がポップされました。コメントをいただければ幸いです。ここに私のコードがあります。

myViewController.h

#import <UIKit/UIKit.h>
#import "Service.h"

@class myController;
@interface PromoViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate, UIPickerViewDelegate>{
}    
@property (strong, nonatomic) IBOutlet UIPickerView *singlePicker;
@property (strong, nonatomic) NSArray *pickerData;

- (IBAction)buttonPressed;  
@end

=======================

myViewController.m:

#import "myViewController.h"
#import "Service.h"

@implementation myViewController;
@synthesize singlePicker;
@synthesize pickerData;

- (IBAction)buttonPressed {
    NSInteger row = [singlePicker selectedRowInComponent:0];
    NSString *selected = [pickerData objectAtIndex:row];
    NSString *title = [[NSString alloc] initWithFormat:
                       @"You selected %@!", selected];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
                message:@"Thank you for choosing."
                delegate:nil
                cancelButtonTitle:@"You're Welcome"
                otherButtonTitles:nil];
    [alert show];
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

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

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    //NSArray *array = [[NSArray alloc] initWithObjects:@"Luke", @"Leia",
    //                  @"Han", @"Chewbacca", @"Artoo", @"Threepio", @"Lando", nil];
    //self.pickerData = array;
    Service* service = [[Service alloc] init];
    [service WEBServiceCountries:self action:@selector(handleAllCountries:)]; 
    //self.pickerData = countryArray;
}


-(NSMutableArray *) handleAllCountries:(id) value{
    NSMutableArray *a = value;
    NSLog(@"myViewController:  we have %d countries", [a count]);

    NSMutableArray *countryArray = [[NSMutableArray alloc] init];
    NSMutableArray *countryArrayid =  [[NSMutableArray alloc]  init];

    for (LBCCountry *country in a ){
        NSLog(@"myViewController:  %d - %@", country.CountryID, country.CountryName);
        [countryArray addObject:country.CountryName];     
        [countryArrayid addObject:[NSString stringWithFormat:@"%d",country.CountryID]];
    }
    self.pickerData = countryArray;
    NSLog(@"pickerData: %@", pickerData);
    return countryArray;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.singlePicker = nil;
    self.pickerData = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
#pragma mark -
#pragma mark Picker Data Source Methods

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

- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component {
    return [pickerData count];
}

#pragma mark Picker Delegate Methods
- (NSString *)pickerView:(UIPickerView *)pickerView
             titleForRow:(NSInteger)row
            forComponent:(NSInteger)component {
    return [pickerData objectAtIndex:row];
}
@end

==============

4

1 に答える 1

0

handleAllCountries メソッドで、プロパティ pickerData を、強い参照がない countryArray に設定します。したがって、そのメソッドが終了すると、pickerData は nil になります。self.pickerData を countryArray に設定する代わりに、次を使用する必要があります。

self.pickerData = [NSArray arrayWithArray:countryArray];

これにより、country 配列のすべてのオブジェクトが pickerData に配置されます。

于 2012-09-09T00:07:05.180 に答える