Tôi đang tạo trò chơi và khi tôi đóng ứng dụng (đóng ở trình quản lý đa nhiệm), tất cả dữ liệu của tôi đã biến mất! Vì vậy, Câu hỏi của tôi rất đơn giản: Làm cách nào để lưu dữ liệu?Cách lưu dữ liệu trong iOS
Trả lời
Giả sử bạn muốn lưu điểm và cấp, cả hai thuộc tính của một đối tượng được gọi là dataHolder.
DataHolder có thể được tạo ra như là một singleton, vì vậy bạn không cần phải lo lắng quá nhiều về từ nơi bạn truy cập vào nó (nó sharedInstance
thực tế):
Nó là mã sẽ trông một chút như thế này:
DataHolder.h
#import <Foundation/Foundation.h>
@interface DataHolder : NSObject
+ (DataHolder *)sharedInstance;
@property (assign) int level;
@property (assign) int score;
-(void) saveData;
-(void) loadData;
@end
DataHolder.m
NSString * const kLevel = @"kLevel";
NSString * const kScore = @"kScore";
@implementation DataHolder
- (id) init
{
self = [super init];
if (self)
{
_level = 0;
_score = 0;
}
return self;
}
+ (DataHolder *)sharedInstance
{
static MDataHolder *_sharedInstance = nil;
static dispatch_once_t onceSecurePredicate;
dispatch_once(&onceSecurePredicate,^
{
_sharedInstance = [[self alloc] init];
});
return _sharedInstance;
}
//in this example you are saving data to NSUserDefault's
//you could save it also to a file or to some more complex
//data structure: depends on what you need, really
-(void)saveData
{
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:self.score] forKey:kScore];
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:self.level] forKey:kLevel];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)loadData
{
if ([[NSUserDefaults standardUserDefaults] objectForKey:kScore])
{
self.score = [(NSNumber *)[[NSUserDefaults standardUserDefaults]
objectForKey:kScore] intValue];
self.level = [(NSNumber *)[[NSUserDefaults standardUserDefaults]
objectForKey:kLevel] intValue];
}
else
{
self.level = 0;
self.score = 0;
}
}
@end
Đừng quên # import "DataHolder.h" ở nơi bạn cần hoặc chỉ cần đặt trong ...-Prefix.pch
.
Bạn có thể thực hiện tải thực tế và tiết kiệm trong appDelegate
phương pháp:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[DataHolder sharedInstance] saveData];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[DataHolder sharedInstance] loadData];
}
Bạn có thể truy cập dữ liệu điểm và trình độ của bạn từ bất cứ nơi nào với [DataHolder sharedInstance].score
và [DataHolder sharedInstance].level
. Điều này có vẻ như quá mức cho một nhiệm vụ đơn giản nhưng nó chắc chắn giúp giữ cho mọi thứ gọn gàng và nó có thể giúp bạn tránh việc lưu giữ tất cả các dữ liệu trong appDelegate
(thường là nhanh chóng & đường dẫn bẩn đến giải pháp).
Bạn có thể lưu dữ liệu trong CoreData, SqlLite hoặc NSUserDefaults Cập nhật Realm cũng là một lựa chọn và rất dễ thực hiện.
Hoặc một tệp phẳng đơn giản, có lẽ chứa dữ liệu trong biểu diễn JSON hoặc định dạng CSV. –
cái nào an toàn? –
Nếu bạn có một số điều nhạy cảm thì đừng lưu trữ nó trong NSUserDefaults. Hãy thử lưu vào những người khác, như Realm sql hoặc dữ liệu cốt lõi và sử dụng mã hóa. nếu bạn có vài thứ như tên người dùng và mật khẩu –
[NSUserDefaults standardUserDefaults]
phù hợp cho một lượng nhỏ dữ liệu như cài đặt và tùy chọn của người dùng. Thông thường, bạn sử dụng tính năng này để cho phép người dùng lưu các bit dữ liệu khác nhau xác định các giá trị toàn cầu như tùy chọn ký tự, tùy chọn vũ khí, v.v.
Để có số lượng lớn hơn như chi tiết cấp trò chơi hoặc thành tích hoặc vũ khí, v.v. Bạn sẽ muốn sử dụng một cái gì đó như Core Data. Đây là cơ sở dữ liệu chính thức hơn có thể dễ dàng di chuyển khi thay đổi lược đồ dữ liệu của bạn. Xem tài liệu tại đây: Core Data và Core Data Programming Guide
Tôi khuyên bạn nên sử dụng Realm để có các giải pháp tổng quát hơn.
Swift 3
Sử dụng UserDefaults
UserDefaults.standard.set(„some value”, „key”)
let value = UserDefaults.standard.string(„key”)
Bạn thậm chí có thể kéo dài mảng sử dụng này
Có vài cách để lưu dữ liệu trong ios.
- UserDefaults - cách tuyệt vời để tiết kiệm một lượng nhỏ dữ liệu.
- Keychain - vị trí an toàn cho dữ liệu có độ nhạy cao an toàn như dữ liệu đăng nhập và mật khẩu.
- Cơ sở dữ liệu SQLite - Nếu ứng dụng của bạn có một số lượng lớn các dữ liệu có cấu trúc
- CoreData - dựa trên một đồ thị đối tượng mô tả các đối tượng cần được lưu
- Saving Files - Tất nhiên bạn cũng có thể trực tiếp lưu tất cả các loại tệp vào hệ thống tệp. Tuy nhiên, bạn chỉ có thể truy cập vào hệ thống tệp trong vùng chứa ứng dụng vì lý do bảo mật.
- Sử dụng cơ sở dữ liệu Realm - thay thế tốt nhất cho Dữ liệu cốt lõi và SQLite db
- NSKeyedArchiver và NSKeyedUnarchiver - cách tốt hơn cho số lượng nhỏ các đối tượng. // i nghĩ như vậy
- 1. iOS: Sao lưu cơ sở dữ liệu lõi trong iCloud?
- 2. Cách cải thiện hiệu suất nhập dữ liệu lớn với dữ liệu cốt lõi trong ios
- 3. Cách lưu trữ dữ liệu lịch sử
- 4. Cách tốt nhất để lưu dữ liệu vào iOS là gì?
- 5. Gợi ý về cách lưu dữ liệu
- 6. Làm thế nào để lưu trữ dữ liệu trong NSCache trong ios?
- 7. Lưu trữ dữ liệu khổng lồ trong SQLite
- 8. Android 2.2 Sao lưu dữ liệu: Cách sao lưu DefaultSharedPreferences?
- 9. Lưu dữ liệu vào phiên trong JSF
- 10. lưu trữ dữ liệu JSON trong mysql
- 11. CoreData Swift: Cách lưu và tải dữ liệu?
- 12. Tôi nên sử dụng loại dữ liệu nào để lưu trữ GUID trong Dữ liệu chính?
- 13. Các tùy chọn để lưu dữ liệu trong iOS là gì?
- 14. Lưu dữ liệu trong tệp thực thi
- 15. Dữ liệu cách được lưu trữ trong * .npy là gì?
- 16. Cách lưu dữ liệu trong ứng dụng android
- 17. Cách lưu dữ liệu Exif sau bitmap coppression trong Android
- 18. Cách tốt nhất để lưu trữ dữ liệu trong BoltDB
- 19. cách lưu trữ mật khẩu trong cơ sở dữ liệu?
- 20. Cách dữ liệu được lưu trữ trong lucene
- 21. Làm cách nào để lưu dữ liệu trong Meteor?
- 22. Cách lưu trữ hàng/cột dữ liệu mysql trong mảng
- 23. Cách lưu hình ảnh trong cơ sở dữ liệu SQLite
- 24. Lưu dữ liệu nhạy cảm trong React Native
- 25. Cách lưu trữ dữ liệu với số lượng thuộc tính động trong cơ sở dữ liệu
- 26. Lưu trữ dữ liệu bổ sung trong bảng aspnet_profile với dữ liệu Tư cách thành viên
- 27. cách lưu trữ dữ liệu vào cơ sở dữ liệu trong HTML5
- 28. Lưu siêu dữ liệu tùy chỉnh vào một hình ảnh được chụp từ AVFoundation trong iOS
- 29. Lưu trữ dữ liệu cũ trong mongoengine
- 30. có thể lưu dữ liệu NSMutableArray hoặc NSDictionary dưới dạng tệp trong iOS không?
gì loại dữ liệu bạn đang cố gắng tiết kiệm và bao nhiêu? –