2012-12-20 21 views
6

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

16

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

Đú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ù. –

+0

@ 0x7fffffff circa (xấp xỉ) 50 –

+0

@ 0x7fffffff (rất nhiều người lập trình wannabe và rất ít nỗ lực ... :() –

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