2012-02-19 2 views
0

Я не могу понять, почему этот код приводит к сбою приложения.Ошибка приложения с сообщением «Не удалось восстановить ранее выбранный кадр»

AppDelegate.h

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    self.rootViewController = [[[RootViewController alloc]init]autorelease]; 

    [self.window setRootViewController:self.rootViewController]; 


    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Вот RootViewController.m код

-(void)loadView 
{ 
    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(10, 10, 10, 10)]; 
    [view setBackgroundColor:[UIColor lightGrayColor]]; 
    [self.view addSubview:view]; 
    [view release]; 
} 

Я получаю это сообщение в отладчике

Unable to restore previously selected frame. 

Here is screenshot

ответ

3

loadView предполагается вид. Он вызывается, когда self.view равен нулю. Теперь вы вызываете [self.view addSubview:view]; UIKit вызывает loadView, и это создает бесконечную рекурсию. Вы должны сделать здесь self.view = view;.

+0

Получите это! Благодаря ! – OhDoh

1

loadView несет ответственность за установку вида в первую очередь. вы пропустили это. Вместо этого вы добавили представление в self.view.

Изменить код на строку ниже:

self.view = view; 

вместо [self.view addSubview:view];

Кроме того, желательно, чтобы позвонить [super loadView] перед возвращением из функции.

Смежные вопросы