سؤال

أحاول إعداد NSCollectionView (لقد فعلت هذا بنجاح في الماضي ، لكن لسبب ما يفشل هذه المرة).

لدي فئة نموذجية تسمى "TestModel" ، ولديها NSString الخاصية التي تُرجع سلسلة (فقط لأغراض الاختبار الآن). ثم لدي NSMutableArray إعلان الممتلكات في فئة مندوب التطبيق الرئيسي الخاص بي ، وإلى هذه المصفوفة أضيف حالات TestModel هدف.

بعد ذلك ، لدي وحدة تحكم صفيف لها صفيف المحتوى الخاص بها ربط مندوب التطبيق NSMutableArray. يمكنني أن أؤكد أن كل شيء هنا يعمل بشكل جيد ؛ nslagging:

[[[arrayController arrangedObjects] objectAtIndex:0] teststring]

عملت بشكل جيد.

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

تحديث: هنا هو الرمز الذي أستخدمه (طلب من ويل شيبلي):

// App delegate class

@interface AppController : NSObject {

NSMutableArray *objectArray;
}
@property (readwrite, retain) NSMutableArray *objectArray;
@end

@implementation AppController
@synthesize objectArray;

- (id)init
{
    if (self = [super init]) {
    objectArray = [[NSMutableArray alloc] init];
    }
    return self;
}


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    TestModel *test = [[[TestModel alloc] initWithString:@"somerandomstring"] autorelease];
    if (test) [objectArray addObject:test];
}
@end

// The model class (TestModel)

@interface TestModel : NSObject {
NSString *teststring;
}
@property (readwrite, retain) NSString *teststring;
- (id)initWithString:(NSString*)customString;
@end

@implementation TestModel
@synthesize teststring;

- (id)initWithString:(NSString*)customString
{
    [self setTeststring:customString];
}

- (void)dealloc
{
    [teststring release];
}
@end

وبعد ذلك ، قلت إن صفيف محتوى وحدة تحكم المصفوفة مرتبط بهذا "Objectarray" ، ويبدو أن محتوى nscollectionView يحمل وحدة تحكم الصفيف. يمكنني التحقق من أن وحدة تحكم الصفيف لديها كائنات فيه بواسطة nslogging [ArrayController reductedObjects] ، ويعيد الكائن الصحيح. إنه لا يوجد شيء يعرضه في NSCOLLECTIONVIEW.

تحديث 2: إذا قمت بتسجيل [CollectionView Content] لا أحصل على شيء:

2009-10-21 08:02:42.385 CollViewTest[743:a0f] (
)

ربما تكون المشكلة هناك.

التحديث 3: كما هو مطلوب هنا مشروع Xcode:

http://www.mediafire.com/؟mjgdzgjjfzw

إنه تطبيق مينوبار ، لذلك ليس له نافذة. عندما تقوم بإنشاء وتشغيل التطبيق ، سترى عنصر Menubar يقول "اختبار" ، وهذا يفتح العرض الذي يحتوي على nscollectionView.

شكرًا

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

المحلول

المشكلة هي أنك لا تستخدم KVC بشكل صحيح. هناك شيئان يمكنك القيام بهما.

الطريقة 1: بسيطة ولكنها ليست أنيقة جدًا

  1. استخدم الكود التالي لإضافة الكائن إلى الصفيف

[Self MutableArrayValueForKey:@"ObjectArray"] AddObject: Test] ؛

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

الطريقة 2: إنشاء طرق KVO اللازمة للمصفوفة "ObjectArray".

  1. حدد الخاصية في إعلان الواجهة الخاص بك
  2. حدد البرامج النصية (أيقونة البرنامج النصي في Menubar)> رمز> إكسسور يعلق على الحافظة
  3. الصق الإعلانات في المكان المناسب في ملف الواجهة الخاص بك
  4. حدد البرامج النصية> رمز> مكان excaps defs على الحافظة
  5. الصق التعاريف في المكان المناسب في ملف التنفيذ الخاص بك

يمكنك بعد ذلك استخدام طريقة تبدو

[self insertObject:test inObjectArrayAtIndex:0];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top