Project Manager Form

Một phần của tài liệu Xây dựng công cụ cho phép thiết kế ứng dụng SCADA vừa và nhỏ trên nền iOS (Trang 37 - 39)

Đây là form lưu project và mở lại project đã lưu, mỗi khi project được lưu sẽ lưu kèm với thời gian hiện tại trên thiết bị. Và cập nhật lên tableview trên giao diện.

Hình 5-1 Project manager Form

Mỗi khi bấm nút add ở góc trên bên phải sẽ gọi alarm trên đó người dùng điền tên project muốn lưu, bấm Ok nếu muốn lưu lại và Cancel nếu không muốn lưu. Hệ thống sẽ tự động lưu lại bằng một tên riêng nếu người chương trình xảy ra lỗi và bung ra khỏi chương trình.

Quá trình Save:

 Khi người dùng chọn tạo một file save mới (chạm vào nút add) hay save trên một file cũ thì ta gọi phương thức "[ProjectParser saveProject:yourProject

withName:yourProjectName]". Phương thức này sẽ cập nhật dữ liệu trên cây dữ liệu trung tâm vào file XML, ngoài ra ta cần phải lấy thời gian ngay lúc người dùng save project để cập nhật lên tableview. Đoạn phương thức lấy thời gian hiện tại:

NSDate CurrentDateTime = [NSDate date];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"]; NSString *time = [dateFormatter stringFromDate: currentDateTime];

Đưa time và tên của project vào mảng quản lý dữ liệu của tableview và thực hiện phương thức :"[self.yourTableView reloadData]" để cập nhật dữ liệu trên tableView.

 Ngoài ra ta còn phải lưu lại tên Project trên một file XML khác (file này chỉ chứa tên của project và ngày mà ta lưu lại project) để khi chương trình vừa mới mở lên người dùng có thể thấy được toàn bộ các project mà mình đã lưu. Để làm được điều đó ta phải tạo một Class mới gọi là ListOfProject (tên này là tuỳ chọn), trong đó có 2 thuộc tính là Name và Date (cả 2 đều thuộc class NSMutableArray để quản lý một chuỗi các

Page 28

project). Ngay từ đầu Class Project Manager Form ta đã gán pointer quản lý mảng tên và ngày tạo project sẽ cùng địa chỉ với 2 thuộc tính Name và Date của ListOfProject để tiện quản lý, cho nên sau khi cập nhật dữ liệu lên trên tableview ta gọi thêm phương thức: "[ProjectParser saveProjectNameListWithNameList: mainDelegate.projectList]" để lưu thông tin các project hiện có vào file XML (chú ý file này khác với file quản lý dữ liệu project, tên của file XML này là một chuỗi phức tạp để không trùng với bất kỳ file XML lưu trữ dữ liệu project nào).

Quá trình Load:

 Khi mới mở chương trình lên (trong phần DidLoad của Project Manager Form) ta cần lấy lại danh sách các project đã lưu để hiện thị lên cho người dùng, để lấy được dữ liệu dùng phương thức :"projectList = [ProjectParser loadProjectNameList]" khi đó

projectList là con trỏ chỉ đối tượng của Class ListOfProject. Vậy là ta đã có được 2 mảng dữ liệu, một là chứa danh sách tên project đã được lưu và một là ngày giờ lưu project. Ngay tại bước này ta thực hiện thao tác gán địa chỉ con trỏ thuộc tính đối tượng của Class ListOfProject vào địa chỉ của con trỏ chỉ 2 mảng quản lý tên và ngày giờ hiển thị trên tableView.

"nameOfProjectArray = projectList.name;

dateModifiedArray = projectList.date;"

Sau đó dùng phương thức cập nhật dữ liệu trên tableView để hiển thị: "[self.yourTableView reloadData]".

 Khi load dữ liệu từ file XML và đưa vào cây dữ liệu trung tâm thì dùng phương thức: "mainDelegate.project = [ProjectParser

loadProjectWithNameOfProject:projectName]" với projectName sẽ được lấy thông qua số thứ tự của cột mà người dùng chọn trên tableView đưa về và ánh xạ tới vị trị trong mảng quản lý tên và ngày giờ lưu project.

 Sau khi đã lấy được dữ liệu từ file XML thì ta cần làm cách nào báo cho các view khác biết là đã load dữ liệu thành công và cần phải làm mới dữ liệu trên mỗi view. Để thực hiện điều đó ta tạo một mảng quản lý biến báo load dữ liệu, nếu có 3 view cần load dữ liệu thì mảng đó sẽ có 3 phần từ, tương tự như vậy với số view nhiều hơn. Giá trị ban đầu của các đối tượng trong mảng sẽ là "False" tức là không xảy ra quá trình load dữ liệu. Và mảng này mảng toàn cục của chương trình. Để chuyển giá trị của mảng này thành "True" thì ta gọi phương thức :"[self sayAllViewLoadProject]".

 Mỗi khi ta chạm vào một nút ở phía dưới để chuyển trang sẽ tạo ra một thao tác ngắt, tại thao tác ngắt đó ta sẽ kiểm tra xem là đối tượng tương ứng trong mảng quản lý biến load dữ liệu có bằng True không, nếu có thì thực hiện xoá dữ liệu cũ và load dữ liệu mới lên. Sau đó đưa đối tượng báo load trở về "False". (Cách tạo thao tác ngắt khi chuyển view sẽ được hướng dẫn trong phụ lục về TabBarController). Quá trình load dữ liệu của từng view đã được nói trong phần giới thiệu về tưng view.

Page 29

Một phần của tài liệu Xây dựng công cụ cho phép thiết kế ứng dụng SCADA vừa và nhỏ trên nền iOS (Trang 37 - 39)