saber rojo queda que pero esta como cerrar cargando carga apple aplicaciones aparece apagado iphone objective-c ipad universal

rojo - mi iphone no carga pero aparece que si



Carga dinámicamente de plumillas para iPhone/iPad en el controlador de vista (5)

He convertido una aplicación de iPhone utilizando el asistente como cosa en XCode en una aplicación universal.

Se construye bien, pero obviamente parece un poco de basura en algunas áreas :)

Necesito cargar las puntas según el dispositivo que se esté utilizando. No deseo crear mis controladores de vista usando initWithNib ya que ya tengo código para crear los controladores con algunos datos ( initWithMyLovelyData ) que no hacen nada que ver con la carga de plumillas.

Sé que para averiguar el dispositivo que usas UI_USER_INTERFACE_IDIOM() , intenté reemplazar el initWithNibName dentro de los controladores de vista reales, asumiendo que se llaman internamente de alguna manera. Pero no está funcionando ya que creo que no estoy seguro de la sintaxis.

Yo he tratado

if(ipad..) self = [super initWithNibName:@"MyIpadNib" bundle:nibBundleOrNil];

Y eso no funciona: /

EDITAR - Sé que lo he editado masivamente, he hecho mi pregunta un poco más específica después de investigar un poco más, ¡disculpas!


Acabo de poner estos dos métodos en una clase llamada IPadHelper, y uso el método addIPadSuffixWhenOnIPad para elegir condicionalmente entre dos nibs dependiendo de la plataforma

+ (BOOL)isIPad{ if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iPhoneOS_3_2){ if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad){ return YES; } } return NO; } + (NSString *)addIPadSuffixWhenOnIPad:(NSString *)resourceName{ if([IPadHelper isIPad]){ return [resourceName stringByAppendingString:@"-iPad"]; } else { return resourceName; } }

vea aquí h ttp://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html para obtener una explicación más detallada del primer método ...


Creo que será mejor crear un archivo C.
FileHelper.h

#import <Foundation/Foundation.h> BOOL isIPad(); NSString *addIPadSuffixWhenOnIPad(NSString *resourceName);

FileHelper.m

#import "FileHelper.h" BOOL isIPad() { if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iPhoneOS_3_2) { if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { return YES; } } return NO; } NSString *addIPadSuffixWhenOnIPad(NSString *resourceName) { if(isIPad()) { return [resourceName stringByAppendingString:@"-iPad"]; } else { return resourceName; } }


EDITAR: @ ​​respuesta de Adán a continuación es la respuesta correcta.

Para determinar qué punta cargar, haga lo siguiente y initWithMyLovelyData método initWithMyLovelyData y use una propiedad para configurar los datos. Debería poder mover fácilmente todo su código de inicio al método de establecimiento de propiedades.

MyViewController *viewController; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { viewController = [[MyViewController alloc] initWithNibName:@"ipadNIB" bundle:nil]; } else { viewController = [[MyViewController alloc] initWithNibName:@"iphoneNIB" bundle:nil]; } viewController.myLovelyData = someData;


En realidad, Apple hace todo esto de forma automática, simplemente nombre sus archivos NIB:

MyViewController~iphone.xib // iPhone MyViewController~ipad.xib // iPad

y cargue su controlador de vista con la menor cantidad de código:

[[MyViewController alloc] initWithNibName:nil bundle:nil]; // Apple will take care of everything


Puedes tener tu pastel y comerlo también. Solo agregue un método que contenga initWithNibName: bundle: y agregue su parámetro myLovelyData:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil myLovelyData:(id)data { if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { // Custom initialization using myLovelyData // } return self; }