Все больше и больше я вижу преимущество создания всех представлений в коде, и я надеюсь полностью переключиться на этот стиль dev. И поскольку название подсказывает, что я некоторые незначительные осложнения. Как обычно, я уверен, что это то, что я просто не замечаю. Взгляните на мой код, можете ли вы предложить предложение? ARC включен.Приложение iOS, в котором нет нищих, проблема с выходом из-под земли
Что происходит, метод -(id)init;
возвращает nil, когда я проверяю его в делегате приложения, и я не могу понять, почему ... вызов self = [super init];
всегда работает, но не в этом случае.
main.m:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([BCAppDelegate class]));
}
}
в BCAppDelegate.m:
@implementation BCAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
BCViewController *bcv = [[BCViewController alloc] init];
if (bcv == nil) { printf("it's nil\n"); }
UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[view setBackgroundColor:[UIColor blueColor]];
[bcv setView:view];
[self.window setRootViewController:bcv];
[self.window makeKeyAndVisible];
return YES;
}
BCViewController.h:
@interface BCViewController : UIViewController <UIImagePickerControllerDelegate>
{
/*some IVARS*/
}
-(id)init;
@end
в BCViewController.m:
@implementation BCViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { return nil; }
-(id)init
{
self = [super init];
if (!self) {
return nil;
}
return self;
}
- (void)loadView
{
/* No Code yet */
}
Поместите контрольную точку в этом 'initWithNibName: пачке:' метод, который вы только что написали. Вы должны увидеть что-то интересное. –
Нет необходимости реализовывать 'initWithNibName: bundle:' вообще. Я делаю все в коде, и у меня нет такого метода ни в одном из моих контроллеров. – rmaddy
Почему вы создаете представление для контроллера вида в делегате приложения? Пусть диспетчер представлений обработает свое собственное представление. Это его работа. Кроме того, не оставляйте 'loadView' так, как у вас есть. Я почти никогда не реализую его сам. Но наличие пустой реализации не позволяет контроллеру представления создавать собственное представление. – rmaddy