Programación orientada a objetos (¡CÓMO!)

Soy nuevo en la programación orientada a objetos y tengo dos controladores de vista. a y B. en A tengo una etiqueta llamada gradeLabel. Quiero hacerlo para poder mostrar ese texto en el controlador de vista B. Así que puse esto:

-(NSString *)grade {
    return [gradeLabel text];
}

Este es el controlador de vista b

#import "InfoInput.h"
@implementation illRememberViewController
  -(IBAction)previewTheInfo {
      InfoInput *info = [[InfoInput alloc] init];
      gradeText.text = info.grade;
  } 

Pero la etiqueta no tiene texto / no muestra texto. Cómo puedo arreglar esto. ¿Estoy utilizando correctamente la programación orientada a objetos?

preguntado el 28 de agosto de 11 a las 04:08

Es posible que desee revisar su título / texto, ya que su problema es con Objective-C, no con la programación orientada a objetos. -

Además, "orientado" no es una palabra. (Escuché a los británicos tratar de imponerlo al mundo, pero se equivocan).

3 Respuestas

Primero, necesita comprender la programación orientada a objetos.

Una vez que lo haga, la respuesta sería "debe crear una instancia o tomar una instancia existente de la clase que encapsula grade y pregúntale por el grade".

Y esta línea de código funcionaría:

gradeText.text = thingThatHoldsTheGrade.grade;

Nadie está siendo malo; conciso, tal vez, pero no intencionalmente mezquino. Hemos visto esta pregunta, y otras muy similares, muchas, muchas veces. En última instancia, se reduce a la falta de conocimiento de cómo se arma el sistema y cómo se integra su aplicación con la infraestructura proporcionada por el sistema.

Si estuviera intentando construir un automóvil, ¿su primera pregunta sería "¿Cómo conecto un cable a la bujía?" No. Sería "¿Cómo funciona básicamente un automóvil, cuáles son los distintos subsistemas y cómo interactúan?" Luego, "si quiero hacer un automóvil personalizado, ¿cómo modifico la plantilla 'automóvil básico' en lo que quiera?"

Programación orientada a objetos con Objective-C es bueno, pero no es tanto un tutorial básico como una guía.

La Guía de programación de aplicaciones iOS también es bastante bueno.

Respondido 29 ago 11, 04:08

que no funciona por alguna razón, no le da a la etiqueta ningún texto - user894725

¿Y cómo instalaste b? ¿De dónde vino? - bbum

Cuando haces esto

InfoInput *info = [[InfoInput alloc] init];

Estás creando una instancia nueva, que no es la misma instancia en la que pones texto en gradeLabel.

Suponiendo que haya empujado controllerB desde ControllerA a continuación, el código debe elegir la instancia correcta de ControllerA.

gradeText.text = [((InfoInput*)self.parentViewController) grade];

No es necesario crear una nueva instancia mediante [InfoInput alloc] init], elimine esta línea.

Respondido 29 ago 11, 07:08

¿Qué deberías hacer? Aprenda programación orientada a objetos. - bbum

por favor ayúdame en lugar de ser arrogante - user894725

gradeText.text = [(InfoInput *) info gradeString]; pero todavía no funciona user894725

Olvídese de la orientación a objetos, primero debe aprender programación básica. - Percepción

INFIERNO EN LUGAR DE SER SIGNIFICATIVO - user894725

¿Tiene un objeto de Clase A alrededor? Necesitas hacer referencia a él de alguna manera. Ejemplo:

A* a = [[A alloc] init]; 
gradeText.text=a.grade;

Pero parece que su primera clase es en realidad un controlador de vista. En ese caso, no almacena ninguna información allí. Normalmente presentaría una tercera clase llamada modelo, y simplemente la llamaría para darle la calificación. Lea sobre el patrón MVC, por favor.
[Editar] Guardaría la información de calificaciones en una propiedad en su UIApplicationDelegeate y leería desde allí; será mucho más fácil para usted que lo que está haciendo ahora mismo. UIViewController no son objetos normales. Normalmente, un Objeto representa una Cosa determinada (por ejemplo, Objeto TestFForStudentA de Tipo TestResult) y se puede utilizar como tal. Sin embargo, UIViewController está vinculado a la interfaz de usuario que controlan (de ahí su nombre) y permanece activo mientras usa la interfaz de usuario, pero es difícil realizar un seguimiento de cuándo está cambiando de vista, etc.

Entonces, sugeriría:
YourAppDelegate.h:

@property (retain) NSString* grade

YourAppDelegate.m:

@synthesize grade;

ViewController A, guarde el valor de la calificación en el delegado de la aplicación una vez que salgamos de la vista

- (void) viewWillDisapper {
   YourAppDelegate* appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
   appDelegate.grade = gradeLabel.text;
}

Y finalmente, puede mostrar la calificación en ViewController B:

-(IBAction)previewTheInfo {
  YourAppDelegate* appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
  gradeText.text = appDelegate.grade;
} 

Tenga en cuenta que esto es solo para darle una primera idea. Lo que realmente desea es crear un objeto que almacene el grado y lleve ese objeto entre los controladores de vista

Respondido 29 ago 11, 03:08

ambos mi clase son controladores de vista - user894725

No quiero reiniciar con un objetivo - clase c - user894725

¡GRACIAS! Lo mejor es que lo entendí todo. Entonces, podría haber hecho el mismo código que había hecho antes, pero tenía que hacerlo dentro de una clase Objective-C. Gracias - user894725

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.