更改视图控制器时,Singleton会导致应用程序崩溃

时间:2011-10-16 10:36:15

标签: ios xcode singleton

我正在尝试使用单例类来根据用户所做的选择来选择要显示的自定义内容。它是这样的:显示一个列表,用户选择列表中的一行,然后应用程序进入另一个ViewController视图。所使用的ViewController对于所有列表选项都是相同的,但内容是不同的。目前我只设置了一个选项,并尝试使用单例类告诉应用程序可以选择哪些内容。

当选择“莱佛士登陆地点”选项时会发生这种情况:

if(landmarkSelected== @"Raffles Landing Site") {
    RafflesLandmarkInfo *rafflesLandmarkInfo = [[RafflesLandmarkInfo alloc] initWithNibName:@"RafflesLandmarkInfo" bundle:nil];
    [self.navigationController pushViewController:rafflesLandmarkInfo animated:YES];
    [rafflesLandmarkInfo release];

这将打开一个如下实现的UIWebView:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"raffles" ofType:@"html"]isDirectory:NO]]];

我创建了一个单例类,如下所述:http://www.galloway.me.uk/tutorials/singleton-classes/

我为它添加了一个NSMutableString属性,并将之前的代码更改为以下代码:

if(landmarkSelected== @"Raffles Landing Site") {
        LandmarkController* instance = [LandmarkController sharedInstance];
        [instance.activeLandmark setString:@"raffles"];
        RafflesLandmarkInfo *rafflesLandmarkInfo = [[RafflesLandmarkInfo alloc] initWithNibName:@"RafflesLandmarkInfo" bundle:nil];
        [self.navigationController pushViewController:rafflesLandmarkInfo animated:YES];
        [rafflesLandmarkInfo release];

 if (instance.activeLandmark ==@"raffles"){
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:instance.activeLandmark ofType:@"html"]isDirectory:NO]]];
}

但是当我从选项列表中选择莱佛士登陆网站时,应用程序崩溃了。罪魁祸首似乎是

[instance.activeLandmark setString:@"raffles"];

如何在第一个ViewController中设置activeLandmark字符串,这样当它加载第二个ViewController时,它会根据第一个ViewController中设置的值显示内容?

1 个答案:

答案 0 :(得分:0)

在你的单例中,在尝试分配它之前是否已分配/初始化activeLandmark字符串?