Trang chủ > Lập trình iPhone cơ bản > Lập trình iPhone – Lưu và lấy dữ liệu sử dụng NSUserDefaults

Lập trình iPhone – Lưu và lấy dữ liệu sử dụng NSUserDefaults


Trong bài đọc này, mình sẽ giới thiệu với các bạn cách lưu và lấy các loại dữ liệu khác nhau sử dụng đối tượng NSUserDefaults. Đối với các loại dữ liệu nhỏ như là điểm số trong game, thông tin đăng nhập, hay trạng thái chương trình thì lưu bằng cách này là hết sức thuận tiện và phù hợp.
Lưu dữ liệu bằng đối tượng NSUserDefaults tỏ ra khá đơn giản vì không đòi hỏi bạn phải có những hiểu biết về cơ sở dữ liệu. Vì vậy nếu bạn không muốn ứng dụng của bạn phải dùng đến SQLite hay CoreData thì đây sẽ là cách rất tốt để bạn thao tác với việc lưu trữ và truy cập dữ liệu.
Trong bài này chúng ta sẽ làm theo các bước sau:
Tạo một ứng dụng kiểu View Based
Mình sẽ không nhắc lại các bước tạo một ứng dụng kiểu view based vì trong các bài đọc trước chúng ta đã nhiều lần làm công việc này. Sau khi tạo xong ta sẽ có một view trống. Vì giao diện của chúng ta không cần các chức năng đặc biệt gì nên như thế là đủ.
Tạo IBOutle và IBAction
Chúng ta cần set up IBOutlet cho một UILabel và một UITextField để có thể liên kết giao diện với code. Ta cũng cần một UIButton và IBAction (updatePrefs) cho button này để khi người dùng bấm lên nút thì phương thức này được gọi và dữ liệu sẽ được lưu.
Tạo giao diện bằng Interface Builder
Giao diện cho ứng dụng này hết sức đơn giản, ta chỉ cần một UILabel, một UIButton và một UITextField. Kéo thả các component này từ Interface Builder vào trong View của bạn.
Liên kết các UI Components tới các Outlets và Action
Nếu bạn băn khoăn chúng ta làm gì với bước này, bạn có thể đọc lại bài liên kết giao diện tới code. Đơn giản ta chỉ đang tạo ra các mối liên hệ giữa các UIComponent với mã nguồn. Điều này cho phép ta tương tác với các UIComponent bằng code.
Thực thi phương thức updatePrefs
Đây là nơi mà ta sẽ thực hiện việc lưu dữ liệu. Trong phương thức này, chúng ta thực hiện các thao tác sau:
• Trỏ tới đối tượng NSUserDefaults – xong bước này ta có thể gọi các phương thức của đối tượng NSUserDefaults để lưu dữ liệu của ta.
• Gọi phương thức setObject forKey – cho phép ta lưu một string vớ một key cho trước. Key thực tế cũng chỉ là một giá trị kiểu chuỗi mà ta sẽ dùng để tìm kiếm dữ liệu của chúng ta.
• Gọi phương thức resignFirstResponder trên đối tượng UITextField để giấu bàn phím sau khi người dùng lên bấm nút bấm trên giao diện(hoặc khi mã nguồn return).
• Cập nhật thông điệp trên UILabel “Application Preference Saved” để thông báo cho người dùng biết dữ liệu đã được lưu.
Thực thi phương thức ViewDidLoad
Đơn giản ta bắt đầu bằng việc bỏ các comment cho phương thức này. Phương thức này được gọi sau khi view được load (tất cả các components được load và hiển thị). Những gì ta muốn làm trong phương thức này là lấy đối tượng NSUserDefault có key là @”greeting” mà ta đã lưu. Ta sẽ lấy được tên mà người dùng lưu trước đó. Nếu biến này là nil, thì đây là lần đầu tiên ứng dụng được chạy hoặc trước đó người dùng chưa từng lưu tên.
Đây là các bước ta thực hiện trong phương thức này:
• Lấy được Handle tới đối tượng NSUserDefautls
• Lấy ra tên người dùng đã lưu trước đó bằng cách gọi phương thức getObject với tham số truyền vào là key @”greeting”
• Kiểm tra xem nếu tên lấy ra là nil không – nếu thế, hiển thị lời chào mặc định (Welcome guest)
• Nếu tên người dùng không phải là nil, tạo một chuỗi mới với tên người dùng sử dụng phương thức initWithFormat. Cách này cho phép ta nối tên người dùng vào sau lời chào “Welcome”. initWithFormat yêu cầu 1 đối số hoặc nhiều hơn. Đối số thứ nhất là định dạng chuỗi, trong trường hợp của chúng ta là @”Welcome %@!”. Bạn có thể hiểu như sau: thay “%@” bằng một chuỗi (chuỗi đó là tham số tiếp theo). Nếu bạn đã từng lập trình bằng ngôn ngữ C, chắc bạn sẽ thấy nó giống với hàm printf.
• Sau khi chuỗi đã được khởi tạo, ta gán nó cho name.text để cập nhật UILabel.
Bạn có thể tham khảo nhanh vài trong số những việc mà bạn có thể làm được với đối tượng NSUserDefaults dưới đây:
Saving
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// saving an NSString
[prefs setObject:@”TextToSave” forKey:@”keyToLookupString”];
// saving an NSInteger
[prefs setInteger:42 forKey:@”integerKey”];
// saving a Double
[prefs setDouble:3.1415 forKey:@”doubleKey”];
// saving a Float
[prefs setFloat:1.2345678 forKey:@”floatKey”];
// This is suggested to synch prefs, but is not needed (I didn’t put it in my tut)
[prefs synchronize];
Retrieving
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// getting an NSString
NSString *myString = [prefs stringForKey:@”keyToLookupString”];
// getting an NSInteger
NSInteger myInt = [prefs integerForKey:@”integerKey”];
// getting an Float
float myFloat = [prefs floatForKey:@”floatKey”];
Các bạn có câu hỏi, yêu cầu hoặc chia sẻ gì về lập trình iPhone hãy phản hồi lại! Mình lên vinagames làm vài trận chắn🙂 . Chúc các bạn vui vẻ!

  1. 17/04/2013 lúc 2:21 sáng

    bài viết hay và chi tiết.thanks bạn

  2. KaKa
    15/10/2010 lúc 11:05 sáng

    Các bài viết rất hay và hữu ích, chờ các bài tiếp theo của bạn. Cảm ơn rất nhiều!

  3. Hoangtu
    16/08/2010 lúc 3:21 sáng

    Thanks bạn. Lâu lắm rùi mới thấy bạn viết bài mới.

  1. No trackbacks yet.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: