2

我是 iPhone 开发的新手。请帮我

我有一个视图控制器NSObject在后台调用视图控制器的方法,当该方法调用时,我正在创建一个视图,我self.view addSubview:view在这一行之后编写了它们,我的视图再次加载调用。

我不知道为什么会出现这个问题,请帮助我这里是我的代码。

NSObject.m

- (void) showModalMessage:(NSString *)mes
{
  self = [super init];
        if (self) {
            objViewController = [[ViewController alloc] init];
        }
    [objViewController showPopUp:mes];
}

ViewController.m
- (void) showPopUp:(NSString *)mes
{

    labelView = [[UIView alloc] initWithFrame:CGRectMake(470, 740, 380, 50)];
    [self setLabelViewSettings];
    label = [[UILabel alloc] initWithFrame:CGRectMake(20, 8, 340, 30)];
    [self setLabelSettings];
    [labelView addSubview:label];
    [label release];
    [self.view addSubview:labelView];// After This line View did load calls again 
    [labelView release];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.6];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(hide)];
    [UIView commitAnimations];
}

对不起,我的英语不好,请帮助我

4

1 回答 1

4

每当视图控制器将其视图加载到内存中时,UIViewController自动调用的子类。viewDidLoad视图控制器仅在需要时加载其视图。因此,[self.view addSubview:labelView]导致self.view视图被加载到内存中并被viewDidLoad调用。紧接在此行之前,视图属性必须为 nil,并且访问视图属性时self.view会自动将视图加载到内存中,如UIViewController 类参考中所述。

请注意,viewDidLoad可以多次调用,因为视图控制器可能会在内存不足的情况下卸载其视图并将其视图属性设置为 nil。您需要确保viewDidLoad多次调用是安全的。

正如 jrturton 指出的那样,您正在设置self一个新对象 in showModalMessage:,这是错误的。这保证了当你到达showPopUp:你新创建的ViewController对象时还没有加载它的视图,所以你总是会viewDidLoad在你点击时调用self.view

于 2012-07-06T06:41:06.543 回答