2010-03-08 5 views
2

Je rencontre un problème avec NSUserDefaults. J'ai suivi les étapes dans les livres aussi étroitement que possible pour mon application, mais toujours le même problème.Problème avec NSUserDefaults et instance désallouée

Je reçois un

*** -[NSUserDefaults integerForKey:]: message sent to deallocated instance 0x3b375a0 

erreur quand je tente de charge dans les paramètres. Voici le code que j'ai, il est dans la classe 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"]; 
    } 

Comme vous pouvez le voir, je ne suis pas en train de faire quoi que ce soit avec les valeurs encore, mais je reçois l'erreur sur la ligne de lecture dans la préférence de la boucle. Je l'obtiens aussi si j'essaye de lire un NSString.

Toutes les suggestions seraient grandement appréciées.

Merci

Peter

+0

est ce développement iphone? Quelqu'un qui est sûr s'il vous plaît tag il a des trucs iphone! – RageZ

Répondre

1

Depuis NSNumber est un objet, il me semble probable que vous voulez:

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

(. Ajouter astérisques * après NSNumber et avant que les noms de variables) Bien cela ne semble pas directement lié à votre message d'erreur, c'est la seule anomalie apparente dans votre code.

+1

Conseil supplémentaire: Je suggère de charger les paramètres dans la méthode '+ (void) initialize' de votre classe de délégués. Il est appelé avant même la méthode de délégué 'applicationDidFinishLaunching' de sorte que tous vos paramètres sont également disponibles dans cette méthode. – Eimantas