NSCOLLECTIONVIEW لا يرسم شيئًا
سؤال
أحاول إعداد 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: بسيطة ولكنها ليست أنيقة جدًا
- استخدم الكود التالي لإضافة الكائن إلى الصفيف
[Self MutableArrayValueForKey:@"ObjectArray"] AddObject: Test] ؛
هذا ليس أنيقًا للغاية حيث يتعين عليك تحديد المتغير باستخدام قيمة السلسلة ، لذلك لن تحصل على تحذيرات للمترجم عند توضيحها بشكل غير صحيح.
الطريقة 2: إنشاء طرق KVO اللازمة للمصفوفة "ObjectArray".
- حدد الخاصية في إعلان الواجهة الخاص بك
- حدد البرامج النصية (أيقونة البرنامج النصي في Menubar)> رمز> إكسسور يعلق على الحافظة
- الصق الإعلانات في المكان المناسب في ملف الواجهة الخاص بك
- حدد البرامج النصية> رمز> مكان excaps defs على الحافظة
- الصق التعاريف في المكان المناسب في ملف التنفيذ الخاص بك
يمكنك بعد ذلك استخدام طريقة تبدو
[self insertObject:test inObjectArrayAtIndex:0];