2012-08-14 6 views
12

Soy bastante nuevo en el desarrollo de IOS, y estoy enfrentando un problema aquí que no he encontrado antes. Esto es lo que tengo:IB - No se puede asignar clase para un Controlador de Vista

Creé un proyecto, agregué algunos ViewControllers conectados a sus propias clases. Pero ahora, acabo de agregar un nuevo ViewController en el guión gráfico. Luego creé una nueva clase Objective-C (con es una subclase de UIViewController). El problema es que en IB, no puedo vincular el ViewController a la clase recién creada, ya que simplemente no tengo la clase en la lista proporcionada por IB (ver la imagen a continuación). Mi nueva clase se llama MapShownViewController, pero como puede ver en la imagen, no está disponible.

enter image description here

funcionó bien para todos mis otras clases, pero no para éste.

Aquí está la MapShownViewController.h:

#import <UIKit/UIKit.h> 

@interface MapShownViewController : UIViewController 

@end 

Y el MapShownViewController.m:

#import "MapShownViewController.h" 

@interface MapShownViewController() 

@end 

@implementation MapShownViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
    } 
    return self; 
} 

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

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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 

Puede alguien explicar lo que hice mal, por favor?

+3

'Map' es un nombre terrible para una vista controller- ahora' MapViewController' al igual que en la lista se ve bien –

+0

Esto era para el ejemplo, pero gracias de todas formas por la punta! –

+0

podría agregar el código de map.h, por favor ...? – meronix

Respuesta

26

Tuve este problema exacto y me volvió loco. Lo noté por primera vez después de actualizar XCode a 4.4 de 4.1. Tenía un proyecto existente en el que había estado trabajando en la versión anterior de XCode, y seguí trabajando en él en 4.4. Hice exactamente lo que hice y creé una nueva Vista en el storyboard y luego creé los archivos de la subclase, pero la clase simplemente no estaba disponible en el menú desplegable Clase personalizada en IB. Después de mucha búsqueda en Google y frustración, recurrí a Quit Xcode (cierre completo, no solo cerca) y luego lo reinicié. Luego, como por arte de magia, todo comenzó a funcionar y la nueva clase estuvo inmediatamente disponible en el menú desplegable de clases personalizadas de IB.

+0

¡Eso es exactamente lo que hice, y de hecho lo arreglaron! –

+0

¡Eso es genial, me alegro de que esté ordenado!Considero que es un poco una respuesta de 'Centro de llamadas de TI' (cierre la aplicación y reinicie) pero es la única forma consistente en que puedo solucionar ese problema en particular. Si alguien puede agregar valor a cómo y por qué esto lo soluciona, entonces siéntase libre, pero hasta ese momento, esta es mi solución. –

+0

Tenía el mismo problema. Parece ser un error en la nueva versión de Xcode – MrBr

0

Compruebe si eligió la superclase correcta en su nueva clase. Algunas veces usted crea un controlador de vista heredado por un UITableVIewController. Este no se puede aplicar a un patrón de ViewController en Storyboard.

+0

Lo he comprobado dos veces, es la superclase correcta –

+0

Tengo el mismo problema, no veo la nueva SubClass que definí. – anwarma

4

Compruebe la configuración de su proyecto. xcode-> targets-> build phases-> compile sources El archivo de implementación de su viewcontroller debe agregarse a esta lista.

+0

Tengo el archivo, pero no es como los otros archivos. No tengo el "... en [Nombre del proyecto]" delante de él. ¿Cómo puede pasar esto? –

+0

intente agregar un nuevo controlador. le pide que agregue el archivo a los objetivos (tanto los proyectos como las pruebas), tal vez no los revisó. no estoy seguro. para este problema, puede eliminar y agregar el archivo de implementación en la pestaña de fuentes de compilación en sí. –

+0

Lo he vuelto a crear. He marcado la casilla de verificación para agregarlo al proyecto. Ahora está correctamente en las fuentes de compilación. Pero no puedo verlo en la lista :( –

4

Para que esto funcione hay que asegurarse de lo siguiente:

1) El elemento añadido al guión gráfico es un UIViewController

2) La clase que ha definido tiene la UIViewController como su superclase

@interface MapShownViewController : UIViewController 

3) La clase se está construyendo correctamente en el proyecto.

+1

He seguido todos estos pasos. Todo está bien, excepto que todavía no veo la clase en la lista: s ¿Podría ser un parámetro más genérico que no está configurado correctamente? –

16

Se produjo el mismo problema y reiniciar XCode no fue de ayuda. Siempre puede hacer clic derecho en el guión gráfico y seleccionar Open As > Source Code. Encuentra su punto de vista elemento controlador en el archivo XML y añadir un atributo customClass:

<viewController title="Login" id="TJH-Bg-q4u" customClass="XYZLoginViewController" sceneMemberID="viewController"> 
    ... 
</viewController> 

Accionamiento manual FTW :).

+0

Tuve el mismo problema y esto resolvió mi problema. No estoy seguro de cómo asegurarse de que esto no ocurra de manera repetida. – Laurent

+0

Esto es lo único que funcionó para mí. Al reiniciar Xcode, la clase personalizada apareció en el menú desplegable de clase personalizada, ¡pero no para el controlador de vista que yo quería cambiar! Por algún motivo, este controlador de vista no me permite asignarlo a) del menú desplegable ob) escribiéndolo manualmente en el campo. Pero lo sería para todos mis otros controladores de vista. El controlador de vista particular que no pude cambiar era el único con un controlador de navegación anidado, que era la única diferencia aparente para mí. – dragonflyesque

0

Tuve que configurar mi clase personalizada que hereda de UIViewController y actúa como controlador de vista de tabla a UITableViewController. Hice un simple truco y simplemente cambié mi herencia de clase personalizada a ": UITableViewController" y luego puedo establecer esta clase libremente en el controlador. Por supuesto, después de que se configuró, cambié la herencia de nuevo.

0

Tuve el mismo problema con Xcode 7.1.1 en una aplicación Mac OSX. Intenté todas las sugerencias de las otras respuestas, sin éxito.

Finalmente eliminé los archivos del controlador de mi vista y los creé.
Luego, de repente funcionó ...

0

Solo agregué otra posible solución que ayudó a resolver mi problema ya que los otros no.

Me di cuenta de que estaba buscando mi archivo de controlador de vista personalizado usando Command + Shift + O, pero no pude ver en qué carpeta estaba el archivo, así que noté que por alguna razón faltaba mi clase personalizada del proyecto, pero aún se encuentra en la búsqueda.

¡Todo lo que tenía que hacer era mover los archivos al proyecto otra vez y Voila!

Espero que esto pueda ayudar a alguien en el futuro.

1

Me he encontrado con este problema e intenté todas las demás soluciones publicadas aquí.

Lo que funcionó para mí fue establecer la superclase correcta después de crear una clase personalizada. Entonces deberías poder encontrarlo y seleccionarlo del menú desplegable de clases.

p. Ej.

class LabsViewController: UITableViewController { 
Cuestiones relacionadas