2

我遇到了 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,我也会得到它。

任何建议将不胜感激。

谢谢

彼得

4

1 回答 1

1

由于 NSNumber 是一个对象,因此在我看来您可能想要:

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

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

于 2010-03-11T17:26:09.923 回答