我正在尝试设置一个NSCollectionView
(我过去已成功完成此操作,但出于某种原因,这次失败了。)
我有一个名为“TestModel”的模型类,它有一个NSString
属性,只返回一个字符串(仅用于测试目的)。然后我在我的主app appate类中有一个NSMutableArray
属性声明,并且在这个数组中我添加了TestModel
对象的实例。
然后我有一个Array Controller,它的内容数组绑定了app delegate的NSMutableArray
。我可以确认到目前为止的一切工作正常; NSLogging:
[[[arrayController arrangedObjects] objectAtIndex:0] teststring]
工作正常。
然后,我为集合视图设置(itemPrototype和内容)以及集合视图项(视图)提供了所有适当的绑定。然后,我在集合项视图中有一个绑定到集合视图Item.representedObject.teststring
的文本字段。但是,当我启动应用程序时,NOTHING会显示在集合视图中,只是一个空白的白色屏幕。我错过了什么?
更新:这是我使用的代码(wil shipley要求):
// 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
然后就像我说的那样,Array Controller的内容数组绑定到这个“objectArray”,并且NSCollectionView的Content绑定到Array Controller.arrangedObjects。我可以通过NSLogging [arrayController arrangeObjects]验证Array Controller中是否有对象,并返回正确的对象。它只是在NSCollectionView中没有显示。
更新2:如果我记录[collectionView内容]我什么都没得到:
2009-10-21 08:02:42.385 CollViewTest[743:a0f] (
)
可能存在问题。
更新3:这里要求的是Xcode项目:
http://www.mediafire.com/?mjgdzgjjfzw
它是一个菜单栏应用程序,所以它没有窗口。当您构建并运行应用程序时,您将看到一个名为“test”的菜单栏项,这将打开包含NSCollectionView的视图。
由于
答案 0 :(得分:4)
问题是你没有正确使用KVC。你可以做两件事。
方法1:简单但不那么优雅
[[self mutableArrayValueForKey:@“objectArray”] addObject:test];
这不是那么优雅,因为您必须使用字符串值指定变量,因此拼写错误时不会收到编译器警告。
方法2:生成数组“objectArray”所需的KVO方法。
然后,您可以使用类似
的方法[self insertObject:test inObjectArrayAtIndex:0];