2010-03-08 4 views
2

У меня проблема с 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.

Любые предложения были бы весьма полезными.

Благодаря

Питер

+0

- это развитие iphone? кто-то, кто уверен, пожалуйста, отметьте, что у него есть вещи для iphone! – RageZ

ответ

1

Поскольку NSNumber является объектом, кажется вероятным, что вы хотите:

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

(. Добавить звездочками * после NSNumber и перед именами переменных), хотя это, похоже, не напрямую связано с вашим сообщением об ошибке, это единственный очевидный причуд в вашем коде.

+1

Дополнительная подсказка: я бы предложил загрузить настройки в '+ (void) initialize' метод вашего класса делегата. Он вызывается еще до метода делегирования 'applicationDidFinishLaunching', поэтому все ваши настройки доступны и в этом методе. – Eimantas