iPhone: доступ к значению NSString из другого класса - PullRequest
1 голос
/ 24 июня 2011

Сначала позвольте мне извиниться за мой плохой английский.Поэтому я пытался сделать эту программу, которая получает значение NSString в одном классе из другого класса.Вот код:

/---------------------/tableViewController.h -----------

#import <UIKit/UIKit.h>
@class paisesDetailViewController;

@interface tableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>{
    IBOutlet UITableView *paisesTableView;
    paisesDetailViewController *PaisesDetailViewController;

    //DB
    NSString *DBName;
    NSString *DBPath;
    NSMutableArray *ArrayPais; //means Countrys
    NSString *escolha; //means choise 
}

@property(nonatomic, retain) paisesDetailViewController *PaisesDetailViewController;
@property(nonatomic, retain) NSMutableArray *ArrayPais;
@property(nonatomic, retain) NSString *escolha;

@end




-----------------------------//tableViewController.m---------------

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   NSInteger row = [indexPath row];
    if(self.PaisesDetailViewController == nil)
    {
        paisesDetailViewController *apaisesDetail = [[paisesDetailViewController alloc] initWithNibName:@"paisesDetailView" bundle:nil];
        self.PaisesDetailViewController = apaisesDetail;
        [apaisesDetail release];
    }

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    escolha = [[NSString alloc] init];
    self.escolha = [NSString stringWithFormat:@"%@", [ArrayPais objectAtIndex:(row)]]; 

    paisesDetailViewController *nextview = [[paisesDetailViewController alloc] init];
    [self.navigationController pushViewController:nextview animated:YES];
    [nextview release];

}




-----------------------------------//paisesDetailViewController.h------------
#import <UIKit/UIKit.h>
#import "tableViewController.h"
@class tableViewController;

@interface paisesDetailViewController : UIViewController {
    tableViewController *dados;

}

@property(nonatomic, retain) tableViewController *dados;

@end


//-----------------------paisesDetailViewController.m
#import "paisesDetailViewController.h"
#import "tableViewController.h"

@implementation paisesDetailViewController
@synthesize dados;

-(IBAction) createEvent
{
        NSString *help = [[NSString alloc] initWithString: dados.escolha]; 
}

Проблема в том, что dados.escolha всегда равно нулю, и я просто не могу понять, почему.Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 24 июня 2011

Попробуйте,

paisesDetailViewController *nextview = [[paisesDetailViewController alloc] init];
nextView.dados = self;
[self.navigationController pushViewController:nextview animated:YES];
[nextview release];

ОБНОВЛЕНИЕ:

Попробуйте этот код:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSInteger row = [indexPath row];
    if(self.PaisesDetailViewController == nil)
    {
        paisesDetailViewController *apaisesDetail = [[paisesDetailViewController alloc] initWithNibName:@"paisesDetailView" bundle:nil];
        self.PaisesDetailViewController = apaisesDetail;
        [apaisesDetail release];
    }

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    escolha = [[NSString alloc] init];
    self.escolha = [NSString stringWithFormat:@"%@", [ArrayPais objectAtIndex:(row)]]; 

    paisesDetailViewController *nextview = [[paisesDetailViewController alloc] init];
    nextView.dados = self;
    [self.navigationController pushViewController:nextview animated:YES];
    [nextview release];
}
0 голосов
/ 24 июня 2011
-(IBAction) createEvent
{
    NSString *help = [[NSString alloc] init];

    help = [NSString stringWithFormat: @"%@", self.dados.escolha]; 

    NSLog(@"help is : %@ ", help);

    // You have synthesized them, so use with self
}
0 голосов
/ 24 июня 2011

Убедитесь, что вы включили

@synthesize escolha;

в tableViewController.m. Также убедитесь, что вы разместили и создали экземпляр dados в paisesDetailViewController.m

tableViewController *dados = [[tableViewController alloc] init];

Тогда попробуйте просто

-(IBAction) createEvent
{
        NSString *help = dados.escolha; 
}

Кроме того, ваши соглашения об использовании заглавных букв в обратном порядке. Как правило, имя класса пишется с большой буквы, а экземпляр - нет, например MyObject *myObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...