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

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

21 423 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

Nội dung

HƯỚNG DẪN SỬ DỤNG COREDATA TRONG IOS Mình giới thiệu bạn sử dụng Sqlite trong ios Bài giới thiệu công cụ lưu trữ liệu có cấu trúc khác, có lập trình IOS framework CoreData Core data khác so với sqlite? Core data không sử dụng câu truy vấn sql để gọi liệu trường mà gọi đối tượng với thông tin đối tượng Coredata làm việc context ảnh chụp dataBase, truy vấn xử lý context cuối save database xuống, sqlite làm việc trực tiếp với database thay đổi database, sử dụng coredata thay đổi liệu tuỳ ý chưa cho phép save không ảnh hưởng đến liệu Ngoài core data xcode suport cho hệ quản trị sở liệu dành riêng để thiết kế Ưu điểm, nhược điểm core data so với sqlite nhiều bạn tìm hiểm thêm, vào cụ thể cách sử dụng coredata Trước tiên tạo dự án đặt tên coreData: – Giới thiệu coreData: Core Data lưu trữ liệu qua phiên làm việc, ứng dụng kết thúc liệu tồn Core Data lưu liệu tầng vật lý có dạng: Binary,Xml,Sqlite, InMemory Khi load liệu lên thông qua core data chuyển tất liệu thành đối tượng để truy vấn Core data hệ quản trị ORM (Object-relational mapping) ánh xạ liệu quan hệ từ phía lưu trữ vật lý lên thành đối tượng phía để làm việc Core Data suport thứ quý context giải thích phía Một số đối tượng quản lý core data:  NSManagedObjectModel: Chứa toàn mặt ngữ nghĩa, format csdl, tạo model cách kéo thả, design, tạo thành file thiết kế  NSPersistentStoreCoordinator: Ghi liệu từ phía xuống thành liệu vật lý lưu trữ phía chuyển đọc liệu lên  NSManagedObjectContext: Là ngữ cảnh, ảnh database thời điểm đó, làm việc Context, cuối save liệu xuống Nếu chưa save liệu data không bị ảnh hưởng Snapshot of database ảnh Database, cần cần làm context ? Khi liệu vật lý có nhiều User chọc vào, có user đọc, có user ghi phần này, có user ghi phần kia, liệu bị xung đột, nên sinh khái niệm context, save data ảnh hưởng đến liệu vật lý, tất thao tác xử lý xung đột xử lý tự động, trừ trường hợp user thực delete liệu, user khác save liệu liệu vật lý thật bị xoá hệ thống thông báo lỗi cần xử lý thủ công  NSManagedObject: Cho phép entity,Delete entity Model design  NSFetchRequest: Đọc liệu Update entity, Insert -Thêm Framework: – Thiết kế mô hình coreData: Mình tạo 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 Chọn next-> đặt tên “studentModel”-> chọn vào nút create tạo model coredata Thiết kế: Đặt tên ENTITIES “Student”, Thêm thuộc tính cho entities “Student” : Attribute : studentId kiểu liệu Integer 16, name kiểu liệu String sau thêm trông ảnh sau: Ralationships:Quan hệ bảng Fetched Properties, bạn tham khảo thêm đơn giản giúp cácbạn truy vấn bảng Student Một số lựa chọn thuộc tính: click vào tên thuộc tính ví dụ name, bên phải xuất lựa chọn thuộc tính: Transient : Nếu tích vào giá trị cho thuộc tính, liệu nháp, không lưu vào database, ví dụ thuộc tính tuổi suy từ thuộc tính ngày tháng năm sinh ta không cần lưu tuổi mà cần lấy để so sánh tuổi chẳng hạn Optional: Khi tick vào giá trị thuộc tính không cần truyền giá trị vào Indexed: Khi tick vào giá trị thuộc tính dùng cho thuộc tính key Index in Spotlight: đánh mục tăng khả tìm kiếm Store in External Record File: Ghi liệu file không ghi vào database Cuối hệ csdl 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) lựa chọn Có kiểu xem Editor (bảng), 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 Chọn vào model cần update,insert->next-> chọn vào entity cần thay đổi >next->create -> update insert thành công minh hoạ: Như tạo mô hình Core Data: “Student” -Kết nối mở model để đọc ghi liệu: Trong ViewController.m! Vào ViewDidload: Khởi tạo hàm kết nối mở model CoreData:”initializeCoreData” - (void)viewDidLoad { [super viewDidLoad]; [self initializeCoreData]; } Định nghĩa initializeCoreData: Thêm đoạn mã sau: Để lưu model vào thư mục documents, mở model “đơn giản thư mục Resource readonly không cho thay đổi thông tin” Trong mã code giải thích cụ thể dòng lệnh: -(void) initializeCoreData{ // Lấy đường dẫn Resource NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"studentModel" withExtension:@"momd"]; // Khởi tạo đối tượng Model lên theo url resource -> Đối tượng lưu lại Model NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; // Có thể sinh lỗi sai tên file or đuôi file if (mom == nil) { NSLog(@"Error initializing Managed Object Model"); return; 10 } 11 // Cầu nối liệu với nơi lưu trữ vật lý Đọc Load Model lên ghi xuống 12 NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; 13 // Đối tượng quản lý file 14 NSFileManager *fileManager = [NSFileManager defaultManager]; 15 // lấy đường dẫn đến thư mục docments ứng dụng 16 NSURL *documentsURL = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject]; 17 // Tạo đường dẫn đích đến file , tạo file infor null 18 NSURL *storeURL = [documentsURL 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 lỗi lưu, cấu hình bổ xung cho file sqite, options tuỳ chọn khác khác vs sqlite copy resource lưu model 22 NSPersistentStore *store addPersistentStoreWithType:NSSQLiteStoreType URL:storeURL options:nil error:&error]; 23 // Nếu lỗi file 24 if (store == nil) { = [psc configuration:nil 25 NSLog(@"Error initializing PSC: %@\n%@", [error localizedDescription], [error userInfo]); 26 } 27 // tạo đối tượng context 28 NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 29 // set model cho đối tượng (context) moc 30 [moc setPersistentStoreCoordinator:psc]; 31 // set context cho property 32 self.ManagedObjectContext = moc; 33 34 } Tiếp theo truy vấn thông tin Entity Student: Trong main.StoryBoard, thiết kế giao diện sau: Đưa vào button đặt tên hình, minh hoạ cho chức thực thể Student Ánh xạ button đặt tên file ViewController.h: - (IBAction)Update:(id)sender; - (IBAction)Show:(id)sender; - (IBAction)Add:(id)sender; - (IBAction)Delete:(id)sender; - (IBAction)Filter:(id)sender; Thêm đối tượng để lưu context tiện truy vấn: @property(nonatomic,strong)NSManagedObjectContext *ManagedObjectContext; – Add: Thêm 100 đối tượng Student: giải thích code // Thêm 100 đối tượng student - (IBAction)Add:(id)sender { for (int i=0; i[...]... model để đọc ghi dữ liệu: Trong ViewController.m! Vào ViewDidload: Khởi tạo hàm kết nối mở model CoreData: ”initializeCoreData” 1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 [self initializeCoreData]; 4 } Định nghĩa initializeCoreData: 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... 15 // lấy đường dẫn đến thư mục docments của ứng dụng 16 NSURL *documentsURL = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject]; 17 // Tạo đường dẫn đích đến file , tạo file infor null 18 NSURL *storeURL = [documentsURL URLByAppendingPathComponent:@"Student.sqlite"]; 19 20 NSError *error = nil; 21 //NSPersistentStoreCoordinator lớp gộp sử dụng NSPersistentStore->... vấn: 1 @property(nonatomic,strong)NSManagedObjectContext *ManagedObjectContext; – 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 Đối tượng lưu lại Model... NSError *error=nil; 5 // Truy vấn trả về mảng đối tượng lưu trong results 6 NSArray *results=[self.ManagedObjectContext executeFetchRequest:request error:&error]; 7 // không có bản ghi thì trả vể error 8 if (!results) { 9 NSLog(@"Error fetching Student object localizedDescription],[error userInfo]); 10 abort(); 11 } 12 // trả về số lượng phần tử trong mảng results 13 NSLog(@"%d results ",results.count);... NSError *error=nil; 5 // Truy vấn trả về mảng đối tượng lưu trong results 6 NSArray *results=[self.ManagedObjectContext executeFetchRequest:request error:&error]; 7 // không có bản ghi thì trả vể error 8 if (!results) { 9 NSLog(@"Error fetching Student object localizedDescription],[error userInfo]); 10 abort(); 11 } 12 // trả về số lượng phần tử trong mảng results 13 NSLog(@"%d results ",results.count);... NSError *error=nil; 5 // Truy vấn trả về mảng đối tượng lưu trong results 6 NSArray *results=[self.ManagedObjectContext executeFetchRequest:request error:&error]; 7 // không có bản ghi thì trả vể error 8 if (!results) { 9 NSLog(@"Error fetching Student object localizedDescription],[error userInfo]); 10 abort(); 11 } 12 // trả về số lượng phần tử trong mảng results 13 NSLog(@"%d results ",results.count);... trả về mảng đối tượng lấy mẫu như như trên lưu trong results 12 NSArray *results=[self.ManagedObjectContext executeFetchRequest:request error:&error]; 13 // không có bản ghi thì trả vể error 14 if (!results) { 15 NSLog(@"Error fetching Student object %@\n%@",[error localizedDescription],[error userInfo]); 16 abort(); 17 } 18 // trả về số lượng phần tử trong mảng results 19 NSLog(@"%d results ",results.count);... // set context cho property 32 self.ManagedObjectContext = moc; 33 34 } 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 Á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;

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

TỪ KHÓA LIÊN QUAN

w