سؤال

أعلم أن هذا السؤال قد تم إنجازه من قبل ، لكن التفسير كان غير واضح بعض الشيء بالنسبة لي ، سؤالي أكثر عمومية. أحاول تصور كيفية تحديث البيانات بشكل دوري في تطبيق iPhone ، باستخدام خدمة ويب عن بُعد. من الناحية النظرية ، سيتم مزامنة جزء من البيانات على الهاتف بشكل دوري (فقط عند تحديثه). بينما تتطلب البيانات الأخرى أن يكون المستخدم متصلاً بالإنترنت ، ويتم طلبه أثناء الطيران.

من الناحية النظرية ، يبدو هذا ممكنًا باستخدام بيانات XML-RPC أو JSON و CORE. أتساءل عما إذا كان لدى أي شخص رأي في أفضل طريقة لتنفيذ هذا ، فأنا مطور مبتدئ في iPhone ، لكنني أفهم الكثير من العملية من الناحية النظرية.

شكرًا

هل كانت مفيدة؟

المحلول

لمزامنة مجموعة من الكيانات عندما لا يكون لديك تحكم في الخادم ، إليك نهج واحد:

  1. أضف touched سمة Bool إلى وصف الكيان الخاص بك.

  2. في محاولة المزامنة ، حدد جميع حالات الكيان التي لم تمسها (touched = [NSNumber numberWithBool:NO]).

  3. حلقة من خلال مثيلات من جانب الخادم (JSON) وإضافة أو تحديث الكيانات من متجر البيانات الأساسي الخاص بك إلى المتجر من جانب الخادم الخاص بك ، أو العكس. يعتمد اتجاه التحديث على سياسة التزامن الخاصة بك ، وما هي البيانات "أعذب" على كلا الجانبين. في كلتا الحالتين ، تمت إضافة مارك أو تحديث أو مزامنة كيانات البيانات الأساسية كما تم لمسها (touched = [NSNumber numberWithBool:YES])

  4. اعتمادًا على سياسة المزامنة الخاصة بك ، احذف جميع مثيلات الكيان من متجر البيانات الأساسي الذي لا يزال دون مساس. من المفترض أن يتم حذف الكيانات التي لم تمسها من متجر من جانب الخادم الخاص بك ، لأنه لم يحدث حدث إضافي أو تحديث أو مزامنة بين متجر البيانات الأساسي والخادم لتلك الكائنات.

التزامن هو قدر لا بأس به من العمل للتنفيذ وسوف يعتمد على درجة المزامنة التي تحتاجها لدعمها. إذا كنت تقوم فقط بسحب البيانات ، فستكون الخطوة 3 أبسط بكثير لأنك لن تحتاج إلى دفع تحديثات الكائن إلى الخادم.

نصائح أخرى

المزامنة صعب ، صعب جدا. من الناحية المثالية ، قد ترغب في تلقي دلتا من التغييرات من الخادم ثم استخدام معرف فريد لكل سجل في البيانات الأساسية ، وتحديث فقط تلك السجلات الجديدة أو التي تم تغييرها.

على افتراض أنه يمكنك القيام بذلك ، فإن الكود مستقيم إلى الأمام. إذا كنت متزامنة في كلا الاتجاهين ، فستكون الأمور أكثر تعقيدًا لأنك تحتاج إلى تتبع الدلتا على كلا الجانبين والتعامل مع الاصطدامات.

هل يمكنك توضيح نوع المزامنة التي تريد إنجازها؟ هل هو ثنائي الاتجاه أم سحب فقط؟

لدي إجابة ، لكنها مصابة. أنا أبحث حاليًا عن حل أكثر قبولا/موثوقية (أي أي شيء يطبخ ماركوس زارا).

ما فعلته يحتاج إلى بعض العمل ... على محمل الجد ، لأنه لا يعمل طوال الوقت ...

يحتوي الجهاز المحمول على كتالوج JSON من الكيانات ، وإصداراتها ، وعنوان URL يشير إلى ملف JSON مع محتويات الكيانات.

يحتوي الخادم على نفس الإعداد ، ويسرد الكتالوج الكيانات ، إلخ.

كلما بدأ الجهاز المحمول ، يقارن إصدارات الكيان من الكتالوج المحلي مع الكتالوج على الخادم. إذا كانت أي من هذه الإصدارات على الخادم أحدث ، فإنها توفر للمستخدم فرصة لتنزيل تحديثات الكيان.

عندما يختار المستخدم تحديثه ، يحتوي الجهاز المحمول الآن على عنوان URL لكل من الكيانات الجديدة/التي تم تغييرها ويقوم بتنزيله. بمجرد التنزيل ، سوف ينفجر التطبيق جميع الكائنات لكل من الكيانات التي تم تغييرها ، ثم أدخل الكائنات الجديدة من JSON. في حالة حدوث خطأ ، يتم إعادة عمليات الحذف/الإدراج إلى حالة ما قبل التحديث.

هذا يعمل ، نوع من. لا يمكنني التقاطها في جلسة تصحيح عندما تسير الأمور ، لذلك لست متأكدًا مما قد يسبب الفساد أو عدم الاتساق في هذه العملية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top