Ir para conteúdo
  • Cadastre-se

Passando Objetos entre classes


Posts Recomendados

Olá a todos!

Estou tendo um pouco de dificuldade e agradeceria muito a quem puder me ajudar:

Eu tenho um arquivo x.h e x.m, e nesse arquivo x.h tenho um int i, que recebe valores em x.m. Tenho tb arquivos y.h e y.m. Eu gostaria de passar o int i de x.m para y.m, mas quando eu passo, int i volta a valer 0.

Não sei se me fiz claro o suficiente, mas agradeço se alguém puder ajudar!

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

  • Respostas 13
  • Criado
  • Última resposta

Top Postadores Neste Tópico

Dias Populares

Top Postadores Neste Tópico

Dias Populares

h = header

m = implementation

Não sei se entendi, mas você não deveria fazer um import do teu x.h no y.h? E aí sim, definir uma propriedade (que vai ser um objeto) da tua classe que está no x.h

No y.m, você implementaria esse objeto, alocaria e inicializaria ele.

x.m é só a implementação da classe

Você precisa criar uma instância dela no seu y.m, para assim poder trabalhar.

Link para o comentário
Compartilhar em outros sites

h = header

m = implementation

Não sei se entendi, mas você não deveria fazer um import do teu x.h no y.h? E aí sim, definir uma propriedade (que vai ser um objeto) da tua classe que está no x.h

No y.m, você implementaria esse objeto, alocaria e inicializaria ele.

x.m é só a implementação da classe

Você precisa criar uma instância dela no seu y.m, para assim poder trabalhar.

Sim, me desculpe, o título foi fail mesmo... Mas eu to usando a variavel no y.m desse jeito:

//exemplo

if (x.variavel == outra_variavel) comando;

e em x.h eu criei um objeto assim: x *x;

Link para o comentário
Compartilhar em outros sites

Amigo, você não foi feliz nessa.

Haha engraçados vocês

Eu ja vi que o titulo foi fail e ja tentei me explicar. Seria mais util se vcs me ajudassem, em vez de perderem seus tempos ficando de brimks ca minha cara.

E pro engraçadinho lá de cima: Eu não tenho professor seu pão com bost@, sou obrigado a aprender sozinho.

Link para o comentário
Compartilhar em outros sites

haha eu ri da piada...

Mas voltando. Matheus, não tem como postar algum código?

Só lembrando que n se trabalha com variáveis neste caso, e sim com objetos.

Vou dar um exemplo para ilustrar, retirado de um curso de Stanford:

CalculatorBrain.h

#import <Foundation/Foundation.h>


@interface CalculatorBrain : NSObject 
{
@private
	double operand;
	NSString * waitingOperation;
	double waitingOperand;
}

@property double operand;

- (double)performOperation:(NSString *)operation;

@end

CalculatorBrain.m

@implementation CalculatorBrain

@synthesize operand;

- (void)performWaitingOperation 
{
	if ([@"+" isEqual:waitingOperation]) {
		operand = waitingOperand + operand;
	} 
	else if ([@"-" isEqual:waitingOperation]) 
	{
		operand = waitingOperand - operand;
	} 
	else if ([@"*" isEqual:waitingOperation]) 
	{
		operand = waitingOperand * operand;
	} 
	else if ([@"/" isEqual:waitingOperation]) 
	{
		if (operand) 
		{
			operand = waitingOperand / operand;	
		}
	} 
}

- (double)performOperation:(NSString *)operation
{
	if ([operation isEqual:@"sqrt"]) 
	{
		operand = sqrt(operand);
	} 
	else 
	{
		[self performWaitingOperation];
		waitingOperation = operation;
		waitingOperand = operand;
	}


	return operand;
}

@end

CalculatorViewController.h

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

@interface CalculatorViewController : UIViewController {
	IBOutlet UILabel * display;
	CalculatorBrain * brain;
	BOOL userIsInTheMiddleOfTypingANumber;	
}

- (IBAction)digitPressed:(UIButton *)sender;
- (IBAction)operationPressed:(UIButton *)sender;

@end

CalculatorViewController.m

#import "CalculatorViewController.h"

@interface CalculatorViewController()
@property (readonly) CalculatorBrain * brain;
@end

@implementation CalculatorViewController


//lazy instantiation pattern
- (CalculatorBrain *)brain
{
	if (!brain)
	{
		brain = [[CalculatorBrain alloc] init];
	}

	return brain;
}

...

- (IBAction)operationPressed:(UIButton *)sender
{
	if (userIsInTheMiddleOfTypingANumber) 
	{

		[self brain].operand = [[display text] doubleValue];
		userIsInTheMiddleOfTypingANumber = NO;
	}


	NSString *operation = [[sender titleLabel] text];
	double result = [[self brain] performOperation:operation];
	[display setText:[NSString stringWithFormat:@"%g", result]];

}

@end

Repara como ele faz para instanciar a classe CalculatorBrain dentro do view controller.

Eu sei que o que vc quer não é exatamente isso, mas pelo que entendi pelo teu pseudo-código, precisa fazer um caminho similar antes de qualquer coisa.

Acho que o exemplo ilustra bem como se trabalha nestes casos, onde existe a interface/implementation de algo, e se quer instanciar ela em outra classe (um controller no caso).

Link para o comentário
Compartilhar em outros sites

Haha engraçados vocês

Eu ja vi que o titulo foi fail e ja tentei me explicar. Seria mais util se vcs me ajudassem, em vez de perderem seus tempos ficando de brimks ca minha cara.

E pro engraçadinho lá de cima: Eu não tenho professor seu pão com bost@, sou obrigado a aprender sozinho.

Retiro a brincadeira (moderadores podem apagar), mas não sou pão com bost@ como vc mencionou.

Nota: Se está tentando aprender "sozinho" por que está pedindo ajuda para os outros aqui no fórum???

Link para o comentário
Compartilhar em outros sites

Retiro a brincadeira (moderadores podem apagar), mas não sou pão com bost@ como vc mencionou.

Nota: Se está tentando aprender "sozinho" por que está pedindo ajuda para os outros aqui no fórum???

Dãã, quando digo que to aprendendo sozinho quero dizer que não faço aula. Aprender sozinho é persquisar por conta propria na internet.

haha eu ri da piada...

Mas voltando. Matheus, não tem como postar algum código?

Só lembrando que n se trabalha com variáveis neste caso, e sim com objetos.

Vou dar um exemplo para ilustrar, retirado de um curso de Stanford:

CalculatorBrain.h

#import <Foundation/Foundation.h>


@interface CalculatorBrain : NSObject 
{
@private
	double operand;
	NSString * waitingOperation;
	double waitingOperand;
}

@property double operand;

- (double)performOperation:(NSString *)operation;

@end

CalculatorBrain.m

@implementation CalculatorBrain

@synthesize operand;

- (void)performWaitingOperation 
{
	if ([@"+" isEqual:waitingOperation]) {
		operand = waitingOperand + operand;
	} 
	else if ([@"-" isEqual:waitingOperation]) 
	{
		operand = waitingOperand - operand;
	} 
	else if ([@"*" isEqual:waitingOperation]) 
	{
		operand = waitingOperand * operand;
	} 
	else if ([@"/" isEqual:waitingOperation]) 
	{
		if (operand) 
		{
			operand = waitingOperand / operand;	
		}
	} 
}

- (double)performOperation:(NSString *)operation
{
	if ([operation isEqual:@"sqrt"]) 
	{
		operand = sqrt(operand);
	} 
	else 
	{
		[self performWaitingOperation];
		waitingOperation = operation;
		waitingOperand = operand;
	}


	return operand;
}

@end

CalculatorViewController.h

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

@interface CalculatorViewController : UIViewController {
	IBOutlet UILabel * display;
	CalculatorBrain * brain;
	BOOL userIsInTheMiddleOfTypingANumber;	
}

- (IBAction)digitPressed:(UIButton *)sender;
- (IBAction)operationPressed:(UIButton *)sender;

@end

CalculatorViewController.m

#import "CalculatorViewController.h"

@interface CalculatorViewController()
@property (readonly) CalculatorBrain * brain;
@end

@implementation CalculatorViewController


//lazy instantiation pattern
- (CalculatorBrain *)brain
{
	if (!brain)
	{
		brain = [[CalculatorBrain alloc] init];
	}

	return brain;
}

...

- (IBAction)operationPressed:(UIButton *)sender
{
	if (userIsInTheMiddleOfTypingANumber) 
	{

		[self brain].operand = [[display text] doubleValue];
		userIsInTheMiddleOfTypingANumber = NO;
	}


	NSString *operation = [[sender titleLabel] text];
	double result = [[self brain] performOperation:operation];
	[display setText:[NSString stringWithFormat:@"%g", result]];

}

@end

Repara como ele faz para instanciar a classe CalculatorBrain dentro do view controller.

Eu sei que o que vc quer não é exatamente isso, mas pelo que entendi pelo teu pseudo-código, precisa fazer um caminho similar antes de qualquer coisa.

Acho que o exemplo ilustra bem como se trabalha nestes casos, onde existe a interface/implementation de algo, e se quer instanciar ela em outra classe (um controller no caso).

Opa, acho que eu entendi! Bou testar no código depois!

Vlw pela ajuda, cara! =D

Link para o comentário
Compartilhar em outros sites

Querido amigo educadíssimo Gabriel: Eu me dirigi ao Versuri, e não a você. Em nenhum momento eu brinquei com a sua cara. Infelizmente não tenho como te ajudar, pois não programo, e não sei absolutamente nada sobre o assunto.

Peço desculpas se lhe ofendi em algum momento.

E Versuri, também não procurei lhe ofender em nenhum momento :)

Editado por Matheus F.
Link para o comentário
Compartilhar em outros sites

Querido amigo educadíssimo Gabriel: Eu me dirigi ao Versuri, e não a você. Em nenhum momento eu brinquei com a sua cara. Infelizmente não tenho como te ajudar, pois não programo, e não sei absolutamente nada sobre o assunto.

Peço desculpas se lhe ofendi em algum momento.

E Versuri, também não procurei lhe ofender em nenhum momento :)

Nesse caso peço desculpas por ter te ofendido tb

Nem to mais entendendo o que tá acontecendo =/

Link para o comentário
Compartilhar em outros sites

Querido amigo Gabriel (aká o educado): Eu me dirigi ao Versuri, e não a você. Em nenhum momento eu brinquei com a sua cara. Infelizmente não tenho como te ajudar, pois não programo, e não sei absolutamente nada sobre o assunto.

Peço desculpas se lhe ofendi em algum momento.

E Versuri, também não procurei lhe ofender em nenhum momento :)

Eu admito que brinquei pois não entendo nada de programação, se eu entendesse eu até ajudaria, nem senti ofensa sua, só não gostei do pão de bost@ que o outro amigo disse, acho que não precisava de tudo isso.

Peço desculpas a todos pelo comentário.

Link para o comentário
Compartilhar em outros sites

Gabriel Vincent o exemplo do NicholasPufal é muito bom e de um fonte que vale a pena você dar uma olhada.

Mas, uma pequena dica: procure entender o conceito de orientação a objeto antes de meter a mão na massa. Vai ajudar e muito.

Sei que muitos adoram sentar e começar a digitar, mas ter os conceitos e saber aplicá-los é o que faz o verdadeiro desenvolvedor.

Do resto, boa sorte. Tenho certeza que a galera vai sempre ajudar aqui no que precisar. Aprendendo juntos.

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
      56k
    • Total de Posts
      465.6k
×
×
  • Criar Novo...