Tôi đang tìm cách lưu các tùy chọn người dùng nhanh hơn NSUserDefaults. Tôi đã phát hiện ra rằng nếu ứng dụng bị giết trong vòng 10 giây sau khi ghi vào NSUserDefaults, nó sẽ không được lưu vĩnh viễn. Tôi sử dụng giá trị mặc định để lưu đường dẫn đến nhạc chuông tùy chỉnh, đường dẫn đến hình ảnh tùy chỉnh, tọa độ bản đồ và về cơ bản chỉ là tùy chọn do người dùng xác định. Sử dụng dữ liệu cốt lõi có phải là lựa chọn tốt hơn không? SQLite? Những gì được chấp nhận là nhanh nhất và nhẹ nhất?NSUserDefaults Mất dữ liệu mới được lưu nếu ứng dụng bị giết trong vòng 10 giây
Trả lời
Bạn cần phải chắc chắn gọi đồng bộ hóa để lưu dữ liệu ngay lập tức.
[[NSUserDefaults standardUserDefaults] synchronize];
Từ Apple class reference:
Bởi vì phương pháp này được tự động gọi trong khoảng thời gian định kỳ, sử dụng phương pháp này chỉ có nếu bạn không thể chờ đợi cho tự động đồng bộ hóa (ví dụ, nếu ứng dụng của bạn là về để thoát) hoặc nếu bạn muốn cập nhật mặc định của người dùng thành nội dung trên đĩa mặc dù bạn chưa thực hiện bất kỳ thay đổi nào.
Và để trả lời câu hỏi thứ hai của bạn, nó thực sự phụ thuộc vào lượng dữ liệu bạn muốn lưu trữ. NSUserDefaults được thiết kế để lưu trữ một lượng rất nhỏ dữ liệu (cho các sở thích) như trạng thái của công tắc, vv Bạn có thể thoát khỏi lưu trữ đường dẫn đến hình ảnh và nhạc chuông ở đây nhưng không được khuyến khích chính xác. Bằng cách đó tôi có nghĩa là bạn có thể, nhưng có lẽ không nên.
Dữ liệu cốt lõi là một cách tiếp cận tốt hơn nhiều nếu bạn có kế hoạch lưu trữ nhiều đường dẫn này vì nó rất dễ mở rộng và hoạt động rất tốt. Vì vậy, tổng thể, nếu bạn cần lưu trữ nhiều dữ liệu, dữ liệu cốt lõi của người dùng hoặc như một phương án thay thế khác lưu trữ các đường dẫn trong một plist trong thư mục tài liệu.
- 1. Dữ liệu đã lưu bị mất sau khi xóa ứng dụng bằng NSUserDefaults
- 2. Trình biên tập XAML bị treo trong vòng 4-10 giây khiến tôi giận dữ
- 3. Làm mới div với dữ liệu php sau mỗi 10 giây bằng cách sử dụng jQuery
- 4. Cách nào đúng để lưu NSUserDefaults khi ứng dụng của tôi bị chấm dứt trên iOS
- 5. hiển thị dữ liệu sau mỗi 10 giây trong Android
- 6. NSUserDefaults gây ứng dụng từ chối
- 7. “Xóa dữ liệu” cũng có giết ứng dụng không?
- 8. Khi nào trạng thái ứng dụng thuộc về Dữ liệu chính thay vì NSUserDefaults?
- 9. NSUserDefaults có bị xóa khi ứng dụng được cập nhật không?
- 10. Cách tốt để lưu trữ dữ liệu trong suốt vòng đời của ứng dụng Android?
- 11. Tôi có nên sử dụng NSUserDefaults hoặc plist để lưu trữ dữ liệu không?
- 12. Nơi lưu dữ liệu ứng dụng trong ứng dụng .NET
- 13. Vòng đời cơ sở dữ liệu Sqlite? Nó bị xóa khi ứng dụng bị đóng?
- 14. Làm việc với dữ liệu trong Ứng dụng iOS (Chọn gì? NSData, CoreData, sqlite, PList, NSUserDefaults)
- 15. Tại sao NSUserDefaults được sử dụng trong iOS?
- 16. Cách lưu dữ liệu trong ứng dụng android
- 17. Dữ liệu được lưu trữ trong NSUserDefaults có còn thông qua các bản cập nhật ứng dụng và khi cài đặt lại ứng dụng (gỡ cài đặt) không?
- 18. Hành động trên ứng dụng bị giết trong android
- 19. Ngữ cảnh ứng dụng bị giết nhưng hoạt động không
- 20. Trong khi gửi dữ liệu bằng ajax, dữ liệu bị mất
- 21. Nhận tệp NSUserDefaults plist từ thiết bị
- 22. iPhone: Nơi NSUserDefaults được lưu trữ?
- 23. Lưu trữ dữ liệu ứng dụng trong Active Directory
- 24. Tôi bị mất bộ dữ liệu trong Visual Studio
- 25. Lưu các đối tượng CoreData trong NSUserDefaults
- 26. Lưu trữ dữ liệu trong Ứng dụng Google App Engine
- 27. Textmate2 lưu trên tiêu điểm bị mất
- 28. DataGridView -Giá trị không được lưu nếu lựa chọn không bị mất từ một ô
- 29. Lưu dữ liệu ứng dụng Android trong Google Cloud
- 30. NSUserDefaults đồng bộ hóa không lưu trên
Đúng. 1 cho bạn, tôi cũng vậy, tôi đã có 50 đại diện của tôi vào lúc đó cho cùng một câu trả lời. Quá lười biếng để tìm kiếm các dupe, mặc dù. –
@ 0x7fffffff circa (xấp xỉ) 50 –
@ 0x7fffffff (rất nhiều người lập trình wannabe và rất ít nỗ lực ... :() –