سؤال

نوع من السؤال البسيط. لدي عرض TableView في NavigationController. عندما أتطرق إلى خلية ، فإنه يدفع وحدة تحكم العرض بالمعلومات من الخلية ، حتى أتمكن من تعديلها في العرض الجديد. الآن هذا يعمل بشكل صحيح (يمكننا أن نسميها Information: "RootViewController -> Pushed ViewController"). ولكن عندما أقوم بالنقر فوق "حفظ" في العرض الجديد ، أريد أن تعود القيم المعدلة إلى RootViewController قبل أن أتصل بـ PopViewController (InformationPath: "Pushed ViewController -> RootViewController") ، بحيث يمكن عرض القيم المعدلة في TableView.

ما هو النهج الصحيح لهذا؟

تعديل:

يعمل PushViewController و PopViewController. لقد طلبت فقط أفضل طريقة لإعادة المعلومات التي تم تحريرها إلى RootViewController للعرض في TableView ، عند استدعاء Save-Button (PopViewController). أعتقد أنه سأضطر فقط إلى تعديل plist بالمعلومات الجديدة مباشرة من ViewController Pushed. على الرغم من أنني أفضل إرسال المعلومات الجديدة إلى RootViewController وجعلها تتعامل مع الوصول إلى ملف plist.

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

المحلول

لدي نفس الموقف - عرضان TableViews. يعرض التلفزيون الأول قائمة بسجلات قاعدة البيانات ، وعندما يتم استغلاله ، ينتقل إلى TableView الثاني الذي يعرض تفاصيل السجل. أقوم بذلك عن طريق الضغط على التفاصيل TableViewController على مكدس وحدات التحكم في التنقل. حتى الآن اذهب وبسيطة للغاية.

كانت المشكلة التي واجهتها هو أنه بعد تحديث السجل في عرض جدول التفاصيل (وحدة التحكم) ، أردت أن أسمح لجهاز التحكم في جدول القائمة ، حتى يتمكن من تحديث قائمة السجلات.

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

في الوقت نفسه ، أضفت أيضًا وحدة تحكم القائمة كمراقب لأحداث تغيير البيانات الأساسية مثل هذا:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];

لذا ، إذا كان عرض جدول التفاصيل وتحديث وحدة التحكم في تحديث السجل ، فإن وحدة التحكم في القائمة لديها dataSaved: طريقة تسمى ، تمرير كائن NSNOtification.

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

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

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

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

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

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

نصائح أخرى

يمكنك محاولة إعادة التحويل قبل PopViewController ولكن يجب عليك نشر بعض التعليمات البرمجية.

جميع uiviewControllers لديهم ملف navigationController طريقة. عند الضغط على وحدة تحكم العرض إلى وحدة تحكم التنقل ، يتم تعيين هذه الخاصية لتشير إلى وحدة تحكم التنقل.

لذلك ، فقط اتصل [self.navigationController popViewControllerAnimated:YES]; في وحدة التحكم في العرض.

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

عند الاستفادة من صف ، ستذهب إلى عرض جديد بالمعلومات المناسبة.

هنا تقوم ببعض العمليات مثل تحرير البيانات. لذا احفظ أولاً التغييرات عند النقر فوق زر حفظ (عن طريق الاتصال بـ ibacte) وفي طريقة iBacte هذه سوف تحقق من Wheter (يتم حفظ التغييرات بنجاح) ثم اتصل

self.navigationController popviewControllerAnimated: نعم] ؛

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

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