posted by Phan Ngọc Tiến on 2014-12-05 23:59

Mấy năm gần đây coredata là một phần không thể thiếu của các ứng dụng iOS trong việc hổ trợ công việc truy vấn dữ liệu. Tuy nhiên việc sử dụng coredata cũng chưa thật sự là dễ dàng, số lượng code vẫn còn lớn và rườm rà. Magical Record là một thư viện do bên thứ ba phát triển cho coredata. Magical Record giúp cho các đoạn code xữ lý coredata rõ ràng và ngắn gọn hơn.

Cài đặt MagicalRecord:

  • Tải Magical Record tại Github
  • Add thư mục MagicalRecord trong dự án của bạn.
  • Bạn chắc chắn là đã add Coredata.framework vào trong dự án của bạn (trong project setting  Build Phases\Link Binary With Libraries)
  • Trong file [projectName]-Prefix.pch bạn thêm vào sau #ifdef__OBJC__ đoạn code sau
#define MR_SHORTHAND
#import “CoreData+MagicalRecord.h”

Để sử dụng Magical Record việc đầu tiên ta phải tạo Data Model, Trong xcode chọn File/new/File chọn Core Data chọn Data Model 

Trong file Model.xcdatamodeld chung ta thiết kế Database gồm các Entity cần thiết trong chương trình.

Sau đó vào trong file AppDelegate.m function - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions chung ta thêm đoạn code sau đây để setup data.

[MagicalRecord setupCoreDataStackWithStoreNamed:@"Model"];

Các bạn có thể thấy đây là 1 trong những ưu điểm lớn của việc sử dụng Magical Record. Nếu bạn để Ý thấy khi bạn sử dụng Core Data thì lượng core để setup core data rất nhiều dòng khi sử dụng Magical Record thì chỉ còn lại 1 dòng duy nhất.

Để sử dụng core data chúng ta phải tạo đối tượng NSManagedObject của các Entity trong core data. bạn vào File/new/File chọn Core Data chọn NSManagedObject subclass rồi các bạn tạo tất cả các class từ các Entity đã tạo trong xcdatamodeld

Sử dụng Magical Record

1. fetch dữ liệu

để fetch dữ liệu trong coredata bạn sử dụng các phương thức sau:

[Phone findAll];
[Phone findAllWithPredicate:NSPredicate];
[Phone findAllSortedBy:@"attribute" ascending:YES];
[Phone findAllSortedBy:@"attribute" ascending:YES withPredicate:NSPredicate];

2. Create data:

Phone *phone = [Phone createEntity];
[phone setName:@"name"];

Sau khi bạn đã set dữ liệu cho tất cả các attributes bạn phải thực hiện 1 đoạn lệnh để lưu data vào trong coredata

- (void)saveContext {
    [[NSManagedObjectContext defaultContext] saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
        if (success) {
            NSLog(@"You successfully saved your context.");
        } else if (error) {
            NSLog(@"Error saving context: %@", error.description);
        }
    }];
}

3. Update data:

Để update data trong Magical Record cũng đơn giản như create data. Chỉ cần tìm đối tượng NSManagedObject cần update rồi update lại các attributes cần thiết rồi gọi hàm saveContext;

NSArray *phones = [Phone findAll];
Phone *phone = phones[0];
[phone setName:@"new Name"];
[self saveContext];

4. Delete data:

Để xoá dữ liệu bạn chỉ cần gọi hàm deleteEntity

NSArray *phones = [Phone findAll];
Phone *phone = phones[0];
[phone deleteEntity];

Leave a Comment

Fields with * are required.