Pergunta

Olá Pessoal estou tendo problemas com NSUserDefaults e eu não entendo muito bem o que está acontecendo

My App tem 5 níveis e cada nível faz exatamente a mesma coisa com NSUserDefaults (recupera os padrões níveis, altera o valor que o usuário toca o nível e, em seguida, define os padrões e syncronizes no final do nível) a primeira 4 níveis ... o trabalho sem problemas, mas o último nível não guardar os valores. O aplicativo não falha eo último nível não é a última coisa que acontece, e eu ainda tenho os padrões sincronizados quando o termina aplicações. Existe um tamanho máximo nas NSUserDefaults ou há qualquer coisa que alguém pode pensar que eu não tenho, eu vou postar o código abaixo, mas como eu disse que os quatro primeiros níveis funcionar perfeitamente

//header
NSUserDefaults *userData;


@property(nonatomic,retain) NSUserDefaults *userData;


//class file
//Sets the boolean variables for the class to use
userData = [NSUserDefaults standardUserDefaults];
boolOne = [userData boolForKey:@"LevelFiveBoolOne"];
boolTwo = [userData boolForKey:@"LevelFiveBoolTwo"];
boolThree = [userData boolForKey:@"LevelFiveBoolThree"];
boolFour = [userData boolForKey:@"LevelFiveBoolFour"];
boolFive = [userData boolForKey:@"LevelFiveBoolFive"];
boolSix = [userData boolForKey:@"LevelFiveBoolSix"];
boolSeven = [userData boolForKey:@"LevelFiveBoolSeven"];

//End Of Level
[userData setBool:boolOne forKey:@"LevelFiveBoolOne"];
[userData setBool:boolTwo forKey:@"LevelFiveBoolTwo"];
[userData setBool:boolThree forKey:@"LevelFiveBoolThree"];
[userData setBool:boolFour forKey:@"LevelFiveBoolFour"];
[userData setBool:boolFive forKey:@"LevelFiveBoolFive"];
[userData setBool:boolSix forKey:@"LevelFiveBoolSix"];
[userData setBool:boolSeven forKey:@"LevelFiveBoolSeven"];
[userData synchronize];

Quando quando eu mudar para o modo de exibição que usa esses padrões que os valores estão corretos, mas quando eu terminar a aplicação e reiniciá-lo, estes valores não são salvos, todos os outros níveis não exatamente o mesmo processo este é o único nível que doesn 't trabalho.

Eu olhei para isso por um bom tempo e eu estou esperando que alguém lá fora, foi executado para o mesmo problema e pode me dar algumas dicas sobre como eles resolveram-lo.

Agradecemos antecipadamente BWC

Foi útil?

Solução

NSUserDefaults não pode ter uma chance de salvar dependendo de como o processo é encerrado.

Esta resposta tem mais informações: Por que NSUserDefaults não salvar os meus valores ?

Outras dicas

Apenas no caso de alguém é executado em frente este: Quando armazenar um NSDictionary ou NSArray (ou mutável Objetos de ambos), em que o usuário padrões e eles têm um NSURL objeto armazenado, ele não vai salvar os dados no synchonize!

Em algum lugar você tem algo como:

// load the default values for the user defaults
userDefaultsValuesPath=[[NSBundle mainBundle] pathForResource:@"UserDefaults" ofType:@"plist"];
userDefaultsValuesDict=[NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath];

// set them in the standard user defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict];

Se os padrões iniciais você estiver configurando não têm padrões LevelFive, seguida, as chamadas falharia.

Verifique o valor de retorno de -Sincronize para erros.

Decidi colocar esta questão de lado e continuar o desenvolvimento que incluiu a adição de coisas depois de nível cinco de modo a lata laço usuário através de níveis e voltar ao menu principal e assim por diante e assim por diante ... e eu não sei por que, mas os userDefaults são poupança para o nível cinco agora, então eu não sei se é porque antes de nível cinco era a última coisa que o aplicativo fez e mesmo que ele não encerrar-se e fez outras coisas talvez não fosse realmente escrever os padrões para o disco ... Eu ainda não sei o que estava errado, mas ele está trabalhando agora e eu não posso obtê-lo a deixar de ver se eu posso obter um erro com o sincronizar ...

Obrigado pela ajuda

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top