Ir para conteúdo
  • Cadastre-se

Dúvida com variáveis


Posts Recomendados

Olá a todos!

Eu preciso passar o valor de uma variável entre as classes. Mas toda vez que faço isso, a variável (que é do tipo int) passa a valer zero. Eu sei que isso é um problema de Obj-C, e não Cocoa Touch. Agradeceria muito se pudessem ajudar. O que eu tenho feito é o seguinte:

RootViewController.m
int var;
var = 10;

DetailViewController.h:
RootViewController *rootViewController;

DetailViewController.m
int var2;
var2 = rootViewController.var

Considere os exemplos acima apenas como um pseudo-código

Editado por Gabriel Vincent
Link para o comentário
Compartilhar em outros sites

  • Respostas 7
  • Criado
  • Última resposta

Top Postadores Neste Tópico

Olá a todos!

Eu preciso passar o valor de uma variável entre as classes. Mas toda vez que faço isso, a variável (que é do tipo int) passa a valer zero. Eu sei que isso é um problema de Obj-C, e não Cocoa Touch. Agradeceria muito se pudessem ajudar. O que eu tenho feito é o seguinte:

RootViewController.m
int var;
var = 10;

DetailViewController.h:
RootViewController *rootViewController;

DetailViewController.m
int var2;
var2 = rootViewController.var

Considere os exemplos acima apenas como um pseudo-código

Seguinte cara na classe que você vai receber o valor você precisa criar uma referencia dizendo que o valor "x" vai para a variavel "y" por exemplo

RootViewController.h

#import <UIKit/UIKit.h>
#import "ExemploViewController.h"
@interface RootViewController : UIViewController {
    int var;
}
@end

ExemploViewController.h

#import <UIKit/UIKit.h>
@interface ExemploViewController : UIViewController {
    int varInt;
}
@property int varInt;
@end

Agora no no seu vamos criar uma ação para um votão que vai enviar o valor, neste caso criei um botão que chama uma view, mas já da para você ter ideia

...
@implementation RootViewController
- (IBAction)envia{
    var = 10;
    ExemploViewController *exemplo = [[[ExemploViewController alloc] init] autorelease];
    //aqui eu passo o valor da var para a variavel varInt que esta dentro de ExemploViewController como eu setei propriedades para esta variavel a classe me permite acessar ela de outras classes
    exemplo.varInt = var;
    [self.navigationController pushViewController:exemplo
                                         animated:YES];

}
....

agora no seu ExemploViewController.m basta apenas fazer

#import "ExemploViewController.h"
@implementation ExemploViewController
@synthesize varInt;
- (void)viewDidLoad
{
    [super viewDidLoad];
    //Aqui vai printar o valor que esta em varInt
    NSLog(@"%d", varInt);
}

espero ter ajudado, eu fiz um post sobre propriedades no meu blog é legal você dar uma lida http://www.ferbass.com/2011/03/15/propriedades-em-objective-c/'>http://www.ferbass.com/2011/03/15/propriedades-em-objective-c/

Abraço

Quer aprender mais sobre desenvolvimento iOS e MAC?

http://www.ferbass.com

Link para o comentário
Compartilhar em outros sites

posta parte do codigo como vc fez

Abraço

Quer aprender mais sobre desenvolvimento iOS e MAC?

http://www.ferbass.com

RootViewController.h
#import <UIKit/UIKit.h>
#import "DetailsViewController.h"

@interface RootViewController : UITableViewController {;
	NSArray *things;
	NSString *test;
}
@property (nonatomic, retain) NSArray *things;

@end

RootViewController.m
#import "RootViewController.h"


@implementation RootViewController
@synthesize things;

#pragma mark -
#pragma mark View lifecycle

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
	return YES;
}

- (void)viewDidLoad {
    [super viewDidLoad];

	things = [[NSArray alloc] initWithObjects:@"1. Devise a secret code with your friends then hand in the homework in that code", 
			  @"2. Continually ask questions so that the professor can’t give homework",
			  @"3. Answer the teacher’s questions in slow motion",
			  @"4. Answer questions only with one word",nil];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}


#pragma mark -
#pragma mark Table view data source

// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [things count];
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

	// Configure the cell.
	cell.text = [[things objectAtIndex:indexPath.row] retain];

    return cell;
}



#pragma mark -
#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	//[tableView deselectRowAtIndexPath:indexPath animated:YES];

	NSString *rowText = [[things objectAtIndex:indexPath.row] retain];
	NSLog(@"Row Text: %@", rowText);

	 DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
	 DetailsViewController *obj = [[[DetailsViewController alloc] init] autorelease];
	 obj.detailText = rowText;
	 [self.navigationController pushViewController:detailsViewController animated:YES];
	 [detailsViewController release];
	 [rowText release];
}


#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Relinquish ownership any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
}


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


@end

DetailsViewController.h

#import <UIKit/UIKit.h>


@interface DetailsViewController : UIViewController {
	IBOutlet UILabel *detailLabel;
	NSString *detailText;

}
@property (nonatomic, retain) UILabel *detailLabel;
@property (nonatomic, retain) NSString *detailText;
@end

DetailsViewController.m


#import "DetailsViewController.h"
#import "RootViewController.h"


@implementation DetailsViewController
@synthesize detailLabel, detailText;


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
	detailText = @"Porra caraleo";
	NSLog(@"%@", detailText);
	detailLabel.text = detailText;
    [super viewDidLoad];
}


- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc. that aren't in use.
}

- (void)viewDidUnload {
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


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


@end

Editado por Gabriel Vincent
Link para o comentário
Compartilhar em outros sites

isso aqui ta errado

1 DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];

2 // ...

3 // Pass the selected object to the new view controller.

4 DetailsViewController *obj = [[[DetailsViewController alloc] init] autorelease];

5 obj.detailText = rowText;

6 [self.navigationController pushViewController:detailsViewController animated:YES];

numerei para facilitar

pq vc esta instanciando 2 vezes o mesmo viewController (linhas 1 e 4)?? E ainda esta passando o valor da variavel para um viewController (linha 5) e puxando o outro (linha 6)....ai fica dificil funcionar. Elimine a linha 4 e na linha 5 faça assim:

detailsViewController.detailText = rowText;

mantenha a linha 6.....deve funcionar corretamente...

Editado por thiago rariz
Link para o comentário
Compartilhar em outros sites

isso aqui ta errado

1 DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];

2 // ...

3 // Pass the selected object to the new view controller.

4 DetailsViewController *obj = [[[DetailsViewController alloc] init] autorelease];

5 obj.detailText = rowText;

6 [self.navigationController pushViewController:detailsViewController animated:YES];

numerei para facilitar

pq vc esta instanciando 2 vezes o mesmo viewController (linhas 1 e 4)?? E ainda esta passando o valor da variavel para um viewController (linha 5) e puxando o outro (linha 6)....ai fica dificil funcionar. Elimine a linha 4 e na linha 5 faça assim:

detailsViewController.detailText = rowText;

mantenha a linha 6.....deve funcionar corretamente...

Caro Thiago:

Muito obrigado do fundo do meu coração. É impossível dizer em palavras como eu estou feliz de ter feito meu programa funcionar. Estou nesse momento mal conseguindo digitar pois estou dançando freneticamente pelo quarto, de tanta felicidade. Já estava ficando maluco por causa desse problema.

Perdoe-me se meu texto parece um tanto sarcástico, sei que o sou às vezes, quando quero demonstrar felicidade.

Mais uma vez: muito obrigado!

Gabriel Vincent

Editado por Gabriel Vincent
Link para o comentário
Compartilhar em outros sites

Participe do debate

Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.

Visitante
Responder este tópico…

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Limpar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.



  • Estatísticas do Fórum

    • Total de Tópicos
      56.2k
    • Total de Posts
      465.6k
×
×
  • Criar Novo...