1. Trang chủ
  2. » Công Nghệ Thông Tin

HƯỚNG dẫn sử DỤNG COREDATA TRONG IOS

21 424 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 599,08 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài này mình sẽ giới thiệu một công cụ lưu trữ dữ liệu có cấu trúc khác, chỉ có trong lập trình IOS framework CoreData.. Core data không sử dụng các câu truy vấn của sql để gọi dữ liệu c

Trang 1

HƯỚNG DẪN SỬ DỤNG COREDATA TRONG IOS

Mình đã từng giới thiệu các bạn sử dụng Sqlite trong trong ios Bài này mình

sẽ giới thiệu một công cụ lưu trữ dữ liệu có cấu trúc khác, chỉ có trong lập trình IOS framework CoreData Core data khác gì so với sqlite? Core data không

sử dụng các câu truy vấn của sql để gọi dữ liệu của các trường mà gọi từng đối tượng với các thông tin của đối tượng đó Coredata làm việc trên context như một ảnh chụp của dataBase, chúng ta truy vấn xử lý trên context cuối cùng chúng ta mới save database xuống, sqlite làm việc trực tiếp với database thay đổi trên database, như thế sử dụng coredata chúng ta có thể thay đổi dữ liệu tuỳ ý nếu chưa cho phép save thì không ảnh hưởng đến dữ liệu Ngoài ra core data còn được xcode suport cho cả hệ quản trị cơ sở dữ liệu dành riêng để thiết kế Ưu điểm, nhược điểm core data so với sqlite còn rất nhiều các bạn có thể tìm hiểm thêm, mình sẽ đi vào cụ thể cách sử dụng coredata

Trang 2

Trước tiên chúng ta tạo dự án mới và đặt tên coreData:

– Giới thiệu về coreData:

Core Data lưu trữ dữ liệu qua các phiên làm việc, khi ứng dụng kết thúc dữ liệu vẫn tồn tại Core Data lưu dữ liệu dưới tầng vật lý có 4 dạng: Binary,Xml,Sqlite, InMemory Khi load dữ liệu lên thông qua core data sẽ chuyển tất cả dữ liệu thành

đối tượng để chúng ta truy vấn Core data là hệ quản trị ORM (Object-relational

Trang 3

mapping) ánh xạ dữ liệu quan hệ từ phía lưu trữ vật lý lên thành các đối tượng phía trên để chúng ta làm việc Core Data suport một thứ rất quý đó là context như mình đã giải thích phía trên

Một số đối tượng quản lý core data:

NSManagedObjectModel: Chứa toàn bộ về mặt ngữ nghĩa, format

của csdl, tạo model bằng cách kéo thả, design, tạo thành một file thiết kế

NSPersistentStoreCoordinator: Ghi dữ liệu từ phía trên xuống thành

dữ liệu vật lý lưu trữ ở phía dưới và chuyển đọc dữ liệu lên

NSManagedObjectContext: Là một ngữ cảnh, ảnh của database tại

thời điểm đó, chúng ta có thể làm việc trên Context, cuối cùng chúng ta mới save dữ liệu xuống Nếu chưa save thì dữ liệu data không bị ảnh hưởng Snapshot of database ảnh của Database, vì sao cần chúng ta cần làm trên context ? Khi dữ liệu vật lý có nhiều User cùng chọc vào, khi đó có user đọc,

có user ghi phần này, có user ghi phần kia, khi đó dữ liệu sẽ bị xung đột, nên sinh ra khái niệm context, chỉ khi nào chúng ta save data mới ảnh hưởng đến

dữ liệu vật lý, tất cả thao tác xử lý xung đột sẽ được xử lý tự động, chỉ trừ trường hợp một user đã thực delete dữ liệu, một user khác save dữ liệu đó khi đó dữ liệu vật lý thật đã bị xoá khi đó hệ thống sẽ thông báo lỗi và chúng

ta cần xử lý thủ công

entity,Delete entity trên Model design

NSFetchRequest: Đọc dữ liệu ra

Trang 4

-Thêm Framework:

– Thiết kế mô hình coreData:

Mình sẽ tạo ra một mô hình Student gồm: name, studentId

Vào File->New->File: chọn vào Core Data-> chọn vào Data Model

Trang 6

Chọn next-> đặt tên là “studentModel”-> chọn vào nút create như vậy chúng ta

đã tạo ra model coredata

Thiết kế:

Đặt tên ENTITIES là “Student”, Thêm thuộc tính cho entities “Student” :

Attribute : studentId kiểu dữ liệu Integer 16, name kiểu dữ liệu String sau khi thêm chúng ta sẽ trông như ảnh sau:

Ralationships:Quan hệ giữa các bảng và Fetched Properties, các bạn có thể tham khảo thêm ở đây mình chỉ đơn giản giúp cácbạn truy vấn một bảng Student

cơ bản

Trang 7

Một số lựa chọn của thuộc tính:

click vào tên thuộc tính ví dụ như name, bên phải sẽ xuất hiện các lựa chọn thuộc tính:

Trang 8

Transient : Nếu tích vào thì giá trị cho thuộc tính, sẽ là dữ liệu nháp, không được lưu vào database, ví dụ như thuộc tính tuổi được suy ra từ thuộc tính ngày tháng năm sinh khi đó ta không cần lưu tuổi mà chỉ cần lấy ra để so sánh tuổi chẳng hạn

Optional: Khi tick vào thì giá trị thuộc tính có thể không cần truyền giá trị

Trang 9

Cuối hệ csdl có các thông tin: Add entity thêm thực thể( thêm bảng mới), Add Attribute( thêm thuộc tính cho bảng) nào đó chúng ta lựa chọn

Có 2 kiểu xem Editor (bảng), và Style (giao diện trực quan)

Nếu có nhu cầu Update, insert thông tin hệ csdl core data, Chọn File ->

new->File->Core Data->NSManagedObject subclass

Trang 10

Chọn vào model cần update,insert>next> chọn vào entity cần thay đổi

->next->create -> như thế là chúng ta đã update insert thành công

có thể minh hoạ:

Trang 11

Như vậy chúng ta đã tạo được mô hình Core Data: “Student”

Trang 12

-Kết nối mở model để đọc ghi dữ liệu:

Thêm đoạn mã sau: Để sao lưu model vào thư mục documents, và mở model

“đơn giản thư mục Resource chỉ readonly không cho thay đổi thông tin”

Trong mã code mình đã giải thích rất cụ thể từng dòng lệnh:

1 - void) initializeCoreData{

2 // Lấy đường dẫn Resource

Trang 13

8 NSLog(@"Error initializing Managed Object Model");

13 // Đối tượng quản lý file

14 NSFileManager *fileManager = [NSFileManager defaultManager];

15 // lấy đường dẫn đến thư mục docments của ứng dụng

URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];

17 // Tạo đường dẫn đích đến file , tạo file infor null

URLByAppendingPathComponent:@"Student.sqlite"];

19

20 NSError *error = nil;

21 //NSPersistentStoreCoordinator lớp gộp sử dụng NSPersistentStore-> đối tượng thông tin lưu trữ model, để lưu trữ theo kiểu type nào, Tên file, Đưa ra lỗi khi lưu, cấu hình bổ xung cho file sqite, options tuỳ chọn khác khác vs sqlite chỉ copy bởi vì ở đây resource lưu model

addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];

23 // Nếu lỗi file

24 if (store == nil) {

Trang 14

25 NSLog(@"Error initializing PSC: %@\n%@", [error localizedDescription], [error userInfo]);

26 }

27 // tạo một đối tượng context

28 NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

29 // set model cho đối tượng (context) moc

Tiếp theo là truy vấn thông tin Entity Student:

Trong main.StoryBoard, thiết kế giao diện như sau:

Đưa vào 5 button đặt tên như hình, minh hoạ cho 5 chức năng cơ bản của thực thể Student

Trang 15

Ánh xạ button và đặt tên trong file ViewController.h:

1 - (IBAction)Update:(id)sender;

2 - (IBAction)Show:(id)sender;

3 - (IBAction)Add:(id)sender;

Trang 16

– Add: Thêm 100 đối tượng Student: mình đã giải thích trong code

1 // Thêm 100 đối tượng student

2 - (IBAction)Add:(id)sender {

3 for (int i=0; i<100;i++) {

4 // Giống như đối tượng=[kiểudữliệu new] tạo mới một đối tượng trỏ vào vùng nhớ

5 // Ở đây tương tự, đó là tạo mới một đối tượng s vào trong Entity Student, Trên context

Trang 17

14 NSLog(@"Error saving context %@\n%@",[error localizedDescription],[error userInfo]);

12 // trả về số lượng phần tử trong mảng results

13 NSLog(@"%d results ",results.count);

14 for (Student *s in results) {

15 // log ra thông tin Student

16 NSLog(@"%@- %@",s.studentId,s.name);

17 }

Trang 18

12 // trả về số lượng phần tử trong mảng results

13 NSLog(@"%d results ",results.count);

14 for (Student *s in results) {

15 // xoá tất cả các đối tượng

Trang 19

12 // trả về số lượng phần tử trong mảng results

13 NSLog(@"%d results ",results.count);

14 for (Student *s in results) {

15 // đổi name thành chữ hoa

16 s.name=[s.name uppercaseString];

Trang 20

5 // set các điều kiên cho request

6 // set lấy mẫu dữ liệu

7 [request setPredicate:[NSPredicate predicateWithFormat:@"name like

%@",name]];

8 // set sắp xếp tăng

9 [request setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"studentId" ascending:YES]]];

10 NSError *error=nil;

11 // Truy vấn trả về mảng đối tượng lấy mẫu như như trên lưu trong results

Trang 21

12 NSArray *results=[self.ManagedObjectContext executeFetchRequest:request error:&error];

13 // không có bản ghi thì trả vể error

18 // trả về số lượng phần tử trong mảng results

19 NSLog(@"%d results ",results.count);

20 // log ra giá trị studentId và name

21 for (Student *s in results) {

Ngày đăng: 19/10/2016, 00:22

TỪ KHÓA LIÊN QUAN

w