سؤال

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

ولقد تم من خلال شركة آبل أمثلة المطور ومصادر مختلفة على intertubes.

ويبدو أن للاستفادة من البيانات الأساسية ولست بحاجة لتمرير managedObjectContext إلى كل من viewControllers بلدي، لديها viewController تنفيذ NSFetchedResultsControllerDelegate ومن ثم تنفيذ كل الطرق للقيام على جلب وبالتالي تنفيذ

NSFetchedResultsChangeInsert

وNSFetchedResultsChangeDelete  NSFetchedResultsChangeMove  NSFetchedResultsChangeUpdate

وهذا يضيف حوالي 100+ خطوط من التعليمات البرمجية في كل viewController ومن 90٪ نفس الرمز وأنا أكتب مرارا وتكرارا. بالإضافة إلى لدي لتمرير كل شيء حولها وتتبع انها ذاكرة البصمة.

في لغات أخرى أود أن بناء نموذج مفرد من عدد قليل من الفئات التي عقدت طرق المحافظة وتقديم البيانات عند الطلب، وهي متاحة من أي مكان. يبدو أنني لا يمكن أن تأخذ هذا النهج في الهدف C. إذا I حيث لبناء الدرجة الثابتة التي أخذت managedObjectContext وعاد لي ما احتاجه، وأود أن لا يزال لديك لتمرير managedObjectContext في جميع أنحاء لكل عرض، وانها لن تكون أحب بشكل غير متزامن عندما تنفيذ طرق مندوب أن يحصل فقط عندما دعا نتيجة لذلك مستعدة لذلك.

وآمل أن يكون هذا الأمر يبدو معقولا تماما، وأنه يمكن للشخص إما تأكيد أن هناك أي وسيلة أخرى معقولة للقيام بذلك أو مساعدة لي نقطة في اتجاه لتغليف هذا الأمر بطريقة جيدة.

والشكر:)

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

المحلول

والبيانات الأساسية لا يكاد معقدة كما تصفون.

وعموما، التطبيق فون لديه سياق الكائن تمكن "الرئيسي"، التي تملكها بشكل عام من قبل مندوب التطبيق. طالما يمكنك الحصول على مندوب التطبيق (تلميح: [[UIApplication sharedApplication] delegate]) لديك حق الوصول إلى سياق الكائن المدارة. أود أن تعريف متغير عالمي ثابت لعقد إشارة إلى بلدي مندوب التطبيق لجعل الحياة أسهل.

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

والآن، عند إنشاء وحدات التحكم بغية تحرير كائن، انها عموما فكرة جيدة للقيام بذلك في سياق كائن مدار منفصل. إذا ألغى المستخدم، كنت مجرد تجاهل السياق والتغييرات يذهب بعيدا. مرة أخرى، لا حقا بحاجة الى NSFetchedResultsController لهذا لهذه الآراء هي المعنية فقط مع كائن واحد.

عند الانتهاء من تحرير، يمكنك save: سياق الكائن المدارة. الكائنات التي تدير الأخرى الخاصة بك سياقات كائن مدار ينبغي أن تنفذ الأساليب NSFetchedResultsControllerDelegate للحفاظ على عرض جدول متزامنة. مرة أخرى، وهذا يمكن أن تنفذ في فئة أساسية حتى تتمكن من تعميم هذه الوظيفة للتحكم عرض ذات الصلة.

نصائح أخرى

هل لديك على الاطلاق لاستخدام نموذج CoreData، أو أن شيئا يستخدم NSCoder (NSArchiver، NSKeyedArchiver، الخ) العمل؟ لقد وجدت أن CoreData هو مبالغة بالنسبة لمعظم التطبيقات.

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

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