2013-03-08 46 views
6

Tôi có một ứng dụng yêu cầu internet để đồng bộ hóa một dịch vụ web với một db dữ liệu lõi cục bộ. Sau đó, tìm nạp db cục bộ được sử dụng để cư trú các đối tượng khác nhau cho một MapView và một TableView trong một thanh tabbarcontroller. Im nhìn vào những 2 kịch bản:Quy trình làm việc hiệu quả nhất cho ứng dụng iOS này là gì?

AppFlowLogic

Ưu điểm chính của "A" là tôi không cần phải tải trước các ứng dụng với một cơ sở dữ liệu, mặc dù một db nhỏ (khoảng 100 hồ sơ). Vấn đề là nó bị phức tạp. Nếu không có kết nối internet, trong MapView, người dùng sẽ thấy một bản đồ nhưng refreshButton bị vô hiệu hóa. Vì vậy, đó không phải là một vấn đề. Nhưng người dùng vẫn có thể vào xem bảng và anh ta sẽ thấy một cái bàn trống.

Ưu điểm chính của "B" là với db được tải trước, ứng dụng sẽ luôn có sẵn nguồn dữ liệu để vẽ và liệt kê. Tôi không thực sự biết làm thế nào để tải trước các ứng dụng với một db mặc dù.

Tôi muốn đi tuyến đầu tiên, "A". Câu hỏi chính của tôi là, kể từ bây giờ tôi vô hiệu hóa refreshButton trên MapView để nó chỉ hoạt động khi dữ liệu được nhận từ web ... mà sortArray trống khi khởi chạy. Vì vậy, nếu người dùng truy cập vào TableVC, nó sẽ trống. Khi nó đứng, người sử dụng đầu tiên phải bấm vào nút làm mới trước khi đi đến tableview.

Cách hiệu quả nhất để giải quyết vấn đề này là gì?

+0

+1 giải thích hay. – Dilip

+0

Cạnh trường hợp, họ là một nỗi đau để mã cho, nhưng họ rất quan trọng đối với kinh nghiệm người dùng. Tôi nghĩ "A" là lựa chọn tốt nhất của bạn (ý kiến ​​của tôi). Bạn có thể chặn việc sử dụng toàn bộ ứng dụng bằng "Bạn cần tải xuống dữ liệu, nhận kết nối internet" nếu bạn không có dữ liệu ban đầu + không có kết nối. Bạn có thể viết mã để xử lý kịch bản "không có dữ liệu" trên mọi màn hình mà người dùng có thể truy cập khi họ không có dữ liệu. Hầu hết các bảng đều chứa một trường hợp "không có dữ liệu" để thêm một hàng thông báo cho người dùng. Câu trả lời hay nhất tùy thuộc vào các trường hợp sử dụng và các yêu cầu của bạn và thường thiên vị theo sở thích cá nhân. – DBD

+0

Cảm ơn Dilip, tôi thực sự muốn có một mô-đun xcode để xử lý logic, để cho bạn thấy nó là gì theo mã của bạn bởi vì Im rất trực quan. DBD, mặc dù tôi nên tìm hiểu làm thế nào để mã cho các kịch bản khởi động đầu tiên và như vậy, tôi nghĩ rằng người dùng cần phải có kết nối internet cần thiết. Tôi không chắc chắn về việc chặn toàn bộ ứng dụng nhưng ít nhất là "không có dữ liệu". Mặc dù, đó là bản chất giống như chặn toàn bộ ứng dụng bởi vì họ sẽ không thấy gì ngoài vỏ. Sau đó, một lần nữa, trong điều kiện UX, tốt hơn là để cho họ thấy một cái gì đó. Vì vậy, Im stumped: (Tôi đoán tôi cần phải đi theo con đường khó khăn – marciokoko

Trả lời

2

Nếu 100 bản ghi đủ tĩnh để bạn có thể gửi một nhóm bản ghi mặc định bằng ứng dụng, đó sẽ là giải pháp tốt nhất. Người sử dụng, có hoặc không có internet, được một tableview dân cư.

Gửi bản ghi của bạn dưới dạng plist trong gói ứng dụng của bạn. Vào lần khởi chạy đầu tiên, hãy mở plist và thêm mỗi mục nhập làm đối tượng mới vào dữ liệu lõi. Loại "gieo" này diễn ra rất nhanh. Chỉ cần tạo một bộ sưu tập (mảng, từ điển) cho plist, sau đó liệt kê thông qua, ánh xạ nó tới các thuộc tính managedObject của bạn.

Có mã cho bạn biết cách thực hiện điều này trong video WWAC 2012 của iCloud và Dữ liệu cốt lõi (chỉ cần bỏ qua phần iCloud).

Sau đó, nếu có kết nối sau khi ghép, bạn có thể đồng bộ hóa dữ liệu, dữ liệu này sẽ cập nhật/thay thế/etc dữ liệu được điền trước.

+0

Ok cảm ơn Các bản ghi về cơ bản là các vị trí lưu trữ Một bản ghi mới được thêm vào mỗi tháng hoặc hơn – marciokoko

+0

Vì vậy, tôi không thể gửi nó với một db Dữ liệu cốt lõi được tải trước? – marciokoko

+0

Không. Dữ liệu cốt lõi thêm một loạt các bảng và các mối quan hệ và tất cả các loại điều đặc biệt vào cơ sở dữ liệu sqlite chỉ có thể được thực hiện khi bạn thực sự trải qua dữ liệu cốt lõi để thực hiện trong ứng dụng của mình. Hãy cẩn thận với bất kỳ bài đăng trên blog nào hiển thị cho bạn theo cách khác! Nhưng đừng lo lắng, việc gieo giống không phải là xấu như bạn nghĩ. –