Tôi đã làm việc trên một ứng dụng xử lý hành vi chính xác này trong 2 tháng qua. Nó có một tập nhỏ các chức năng chỉ trực tuyến và một tập hợp lớn các chức năng ngoại tuyến/trực tuyến.
Tôi đang sử dụng sqlite để lưu trữ cục bộ như được đề xuất ở đây với một phiên bản sửa đổi của thư viện sqlitepersistentobjects. Phiên bản cơ sở của sqlitepersistentobjects không phải là chủ đề an toàn để xem nếu bạn đang sử dụng nó. (kiểm tra objectiverecord trong: objectivesync cho một chủ đề an toàn thay thế nhưng được chuẩn bị để đào sâu vào mã). Nếu bạn sẵn sàng phát triển cho sdk 3.0 thì dữ liệu cốt lõi là một khả năng khác cho một thư viện sqlite.
Kiến trúc tổng thể đủ đơn giản Tôi đã lập mô hình bộ nhớ cục bộ bằng cách sử dụng sqlite và tương tác từ xa bằng cách sử dụng objective resource đối với ứng dụng đường ray và REST api. Nó có thể sử dụng xml hoặc json để tuần tự hóa dữ liệu.
Khi đối tượng được sửa đổi cục bộ, thay đổi đầu tiên được lưu vào bản ghi cơ sở dữ liệu sqlite cho đối tượng đó và sau đó được thêm vào hàng đợi được tuần tự hóa và lưu trữ trong db sqlite cục bộ. (Hàng đợi sau đó có thể được xử lý bất kỳ lúc nào)
Nếu có kết nối có sẵn, bất kỳ thay đổi cục bộ được xếp hàng nào sẽ được deserialized và thêm vào NSOperationQueue sau đó xử lý chúng trong nền.
Để thực hiện tất cả công việc này, tôi đã phân lớp NSOperation để nó có thể hỗ trợ nhiều loại hoạt động hàng đợi từ xa - tạo, cập nhật, xóa cơ bản bằng tài nguyên khách quan để thực hiện các yêu cầu từ xa.
Điều tốt đẹp về việc sử dụng NSOperationQueue và NSOperation là chúng xử lý luồng nền cho bạn vì vậy tôi khuyên bạn nên xem tài liệu táo cho các lớp đó và cũng tại quả táo threading guide.
Khi ứng dụng tải có một chút kiểm tra từ xa được thực hiện và xử lý trong nền để kéo xuống dữ liệu mới nhất - mặc dù thành thật mà nói, tôi vẫn đang thay đổi cách hoạt động này một chút.
Đó là tổng quan nhanh về những gì tôi đã phải đối phó với cho đến nay ... hy vọng nó sẽ giúp một chút.
Tôi thứ hai câu hỏi này, và thêm rằng tôi muốn nghe về các chiến lược cho việc sáp nhập dữ liệu không đồng bộ hóa. Liên hệ với một máy chủ để đồng bộ hóa là không có trí tuệ. Phần khó khăn là tìm ra cách kết hợp dữ liệu máy chủ với dữ liệu cục bộ. – Alex