2009-09-13 40 views
6

Hey Guys Tôi đang gặp vấn đề với NSUserDefaults và tôi không hoàn toàn hiểu những gì đang xảy raNSUserDefaults không tiết kiệm đúng cách

My App có 5 cấp độ và mỗi cấp làm điều tương tự chính xác với NSUserDefaults (Lấy mức giá trị mặc định , thay đổi giá trị khi người dùng chơi cấp và sau đó đặt giá trị mặc định và đồng bộ hóa ở cuối cấp) 4 cấp đầu tiên ... hoạt động mà không bị cản trở nhưng cấp cuối cùng không lưu giá trị. Các ứng dụng không sụp đổ và cấp độ cuối cùng không phải là điều cuối cùng xảy ra, và tôi thậm chí có mặc định đồng bộ khi ứng dụng chấm dứt. Có kích thước tối đa trên NSUserDefaults hoặc là có bất cứ điều gì bất cứ ai có thể nghĩ rằng tôi đã không, tôi sẽ gửi mã dưới đây nhưng như tôi đã nói trong bốn cấp độ đầu tiên hoạt động hoàn hảo

//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]; 

Khi khi tôi chuyển đổi đối với chế độ xem sử dụng các giá trị mặc định này, giá trị là chính xác nhưng khi tôi chấm dứt ứng dụng và khởi động lại, các giá trị này không được lưu, mọi cấp khác thực hiện cùng một quy trình chính xác, đây là cấp duy nhất không hoạt động.

Tôi đã nhìn chằm chằm vào điều này một thời gian và tôi hy vọng một người nào đó đã chạy vào cùng một vấn đề và có thể cho tôi một số thông tin chi tiết về cách họ giải quyết nó.

Cảm ơn bạn trước BWC

+0

Khó để nói từ những gì bạn đã đăng. Kiểm tra kỹ phương pháp lưu các giá trị mặc định sau cấp độ. – Jordan

Trả lời

2

Một nơi nào đó bạn có cái gì đó như:

// 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]; 

Nếu giá trị mặc định ban đầu bạn đang thiết lập không có giá trị mặc định LevelFive, sau đó các cuộc gọi sẽ thất bại.

Kiểm tra giá trị trả lại từ -synchronize cho lỗi.

0

Tôi quyết định đưa vấn đề này sang một bên và tiếp tục phát triển bao gồm thêm những thứ sau cấp 5 để người dùng có thể lặp lại các cấp và trở về menu chính, v.v ... và tôi không chắc tại sao nhưng userDefaults đang tiết kiệm cho cấp 5 bây giờ nên tôi không biết đó là vì trước cấp 5 là điều cuối cùng mà ứng dụng đã làm và mặc dù nó không tự chấm dứt và làm những thứ khác có lẽ nó không thực sự viết mặc định để đĩa ... Tôi vẫn không chắc chắn những gì đã sai, nhưng nó làm việc ngay bây giờ và tôi không thể làm cho nó không để xem nếu tôi có thể nhận được một lỗi với đồng bộ ...

Cảm ơn sự giúp đỡ

4

Chỉ trong trường hợp ai đó chạy accross này: Khi lưu trữ một NSDictionary hoặc NSArray (hoặc mutable Đối tượng của cả hai trong số họ) trong giá trị mặc định người dùng và họ có một đối tượng được lưu trữ NSURL, nó sẽ không lưu dữ liệu trên đồng bộ hóa!

+0

Làm thế nào gây phiền nhiễu là ?! –

Các vấn đề liên quan