Ir para conteúdo
Visualizar no app

Uma forma melhor de navegar. Saiba mais.

MM Fórum

Um app em tela cheia na sua Tela de Início com notificações push, avisos e mais.

Para instalar este app no iOS/iPadOS
  1. Toque no ícone de Compartilhamento no Safari
  2. Role o menu e toque em Adicionar à Tela de Início.
  3. Toque em Adicionar no canto superior direito.
Para instalar este app no Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Passando Objetos entre classes

Featured Replies

Postado

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

  • Respostas 13
  • Visualizações 1.1k
  • Criado
  • Última resposta

Top Postadores Neste Tópico

Postado

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.

Postado
  • Autor

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;

Postado

Seu professor sabe que vc está passando os objetos entre as classes??? São roubados??? Nem vou nessa escola...

Postado

Amigo, você não foi feliz nessa.

Postado
  • Autor

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.

Postado

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).

Postado

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???

Postado
  • Autor

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

Postado

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.

Postado
  • Autor

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 =/

Postado

Eu nunca lembro de quotar. Tenho que pegar esse hábito :P

Postado

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.

Postado

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.

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…

Quem Está Navegando 0

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

Conta

Navegação

Buscar

Buscar

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.