كيف يمكنني الحصول على الممثل من وجهة نظر في nscolletionviewitem؟

StackOverflow https://stackoverflow.com/questions/1123053

سؤال

لدي وجهة نظر يتم استخدامها في كل عنصر من العناصر الخاصة بي. لدي iboutlet إلى CollectionViewItem من وجهة نظري، ولدي ذلك مدمن مخدرات في باني واجهة. أريد الوصول إلى قيمة من الممثل (وهو كائن بيانات أساسي) في رمز العرض الخاص بي. فيما يلي مثال على ما أحاول القيام به - الوصول إلى قيمة التسلسل للممثل:

في ملف .h:

IBOutlet NSCollectionViewItem *item; // Connected in IB

في ملف .m

NSString *seq = [[item representedObject] valueForKey:@"seq"];
NSLog(@"Seq: %@", seq); // returns Seq: (null)

أعلم أن SEQ قد يسكنني لأنني ألغيت ملزمة في عرض CollectionViewItem في IB باستخدام مسار المفتاح الممثل .seq وهذا يعمل.

أي فكرة لماذا عندما أحاول الوصول إلى القيمة الخاصة ب SEQ في التعليمات البرمجية لعرضها إرجاع NULL؟

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

المحلول

من المحتمل جدا أن NSCollectionViewItem لا ينسخ عبر اتصالات iBoutlet من وجهات نظر العناصر الخاصة بهم إلى النموذج الأولي NscollectionViewItem. لذلك، item هو لا شيء، لذلك seq سيكون أيضا nil.

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

إذا كنت بحاجة فعلا إلى اتصال مباشرة بالعنصر بطريقة لا يمكن أن توفر الارتباطات، فربما عليك إعدادها يدويا. طريقة واحدة للقيام بذلك هي تجاوز NscolletionViewItem -copyWithZone:, ، اتصل سوبر، ثم اجعل الاتصال يدويا.

نصائح أخرى

1) Subclass NSView المستخدمة في تقديم عنصر في عرض المجموعة

2) في هذه الفئة الفرعية، أضف ملكية مندوب

3) cublcass nscolletionviewitem

4) تجاوز SETVIEW: الطريقة. أضف خطا لتعيين خاصية المفوض للعرض إلى مثيل NscollectionViewItem (أي الذات).

الآن، داخل Subclass nsview، ستحصل على عنصر التموين المقابل عبر خاصية المفوض (على سبيل المثال، يمكنك الوصول إلى تمثيلها).

كان لدي نفس المشكلة، لكنني وجدت حلا سهلا للغاية: وضعت طريقة العرض بطريقة مختلفة وربط هذا في nscollectionViewItem (وهو في الواقع nsviewcontroller). ثم سيتم تشغيل .xib لتحقيق كل خلية ويتم تعيين جميع المنافذ.

  1. Subclass NSView.
  2. إضافة طريقة المندوب إلى الفئة الفرعية ... شيء مثل - (void)mouseDownOnItemAtIndex:(NSUInteger)index لإخبار المستمع بالنقر فوق المستخدم على عنصر في فهرس معين.
  3. اسحب عرض المجموعة باستخدام Self.SuperView في نفس الفصل. قم بإنشاء متغير لتخزين NSUINTEGER. تخزين فهرس العنصر باستخدام الطريقة [[collectionView subviews] indexOfObject:self]. وبعد تمرير هذا الفهرس في طريقة المندوب index معامل.
  4. سيتمكن الفئة التي تتفق مع البروتوكول المحدد في NSView الخاص بك الآن من الاستماع من أي أحداث Mousedown في خلية محددة. إذا كنت تريد تمثيل عنصر معين، اتصل فقط collectionView:itemAtIndex واحصل على العنصر عن طريق الوصول إليه عبر representedObject الممتلكات في NSCollectionViewItem.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top