NSUserDefaults和解除分配的实例出现问题

时间:2010-03-08 08:59:25

标签: iphone cocoa cocoa-touch nsuserdefaults

我遇到NSUserDefaults问题。我尽可能地按照书中的步骤操作我的应用程序,但仍然遇到同样的问题。

我正在

*** -[NSUserDefaults integerForKey:]: message sent to deallocated instance 0x3b375a0
当我尝试加载设置时出现

错误。这是我的代码,它位于App Delegate类中。

- (void)applicationDidFinishLaunching:(UIApplication *)application {
       recordingController = [[RecordingTableViewController alloc] initWithStyle:UITableViewStylePlain];
       [recordingController retain];
        // Add the tab bar controller's current view as a subview of the window
        [window addSubview:tabBarController.view];

        [self loadSettings];   
    }

    -(void)loadSettings
    {
       NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

       NSNumber loop = [defaults objectForKey:@"loop_preference"];
       NSNumber play = [defaults objectForKey:@"play_me_preference"];
       NSNumber volume = [defaults objectForKey:@"volume_preference"];   
    }

正如您所看到的,我并没有尝试对值进行任何操作,但是我在循环首选项中的行读取时出现错误。如果我尝试读取NSString,我也会得到它。

任何建议都将不胜感激。

由于

彼得

1 个答案:

答案 0 :(得分:1)

由于NSNumber是一个对象,我觉得你可能想要:

   NSNumber *loop = [defaults objectForKey:@"loop_preference"];
   NSNumber *play = [defaults objectForKey:@"play_me_preference"];
   NSNumber *volume = [defaults objectForKey:@"volume_preference"];   

(在NSNumber之后和变量名之前添加星号*。)虽然这似乎与您的错误消息没有直接关系,但它是您代码中唯一明显的怪癖。