NSCollectionView什么也没画

我试图建立一个NSCollectionView (我过去成功完成了这个工作,但由于某种原因,这次失败了)。

我有一个名为“TestModel”的模型类,它有一个NSString属性,它返回一个字符串(仅用于测试目的)。 然后,在我的主应用程序委托类中有一个NSMutableArray属性声明,并且添加了此数组,我添加了TestModel对象的实例。

然后我有一个数组控制器,它的内容数组绑定了应用程序委托的NSMutableArray 。 我可以确认到此为止的一切工作正常; NSLogging:

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

工作得很好。

然后,我为设置的集合视图(itemPrototype和content)以及集合视图项目(视图)设置了所有适当的绑定。 然后,我在集合项目视图中有一个文本字段,它绑定到集合视图Item.representedObject.teststring 。 然而,当我启动应用程序时,集合视图中没有任何内容显示,只是一个空白的白色屏幕。 我错过了什么?

更新:这是我使用的代码(请求由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

然后就像我说的阵列控制器的内容数组绑定到这个“objectArray”,并且NSCollectionView的内容绑定到Array Controller.arrangedObjects。 我可以通过NSLogging [arrayController arrangedObjects]验证阵列控制器中是否有对象,并返回正确的对象。 它只是没有显示在NSCollectionView中。

更新2:如果我登录[collectionView内容]我什么也没得到:

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

问题可能在那里。

更新3:这里要求的是Xcode项目:

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

它是一个菜单栏应用程序,所以它没有窗口。 当您构建并运行应用程序时,您会看到一个标题为“test”的菜单栏项目,这将打开包含NSCollectionView的视图。

谢谢


问题是你没有正确使用KVC。 有两件事你可以做。

方法1:简单但不那么优雅

  • 使用下面的代码将对象添加到数组
  • [[self mutableArrayValueForKey:@“objectArray”] addObject:test];

    这不是太优雅,因为你必须使用字符串值指定变量,所以当拼写错误时不会得到编译器警告。

    方法2:生成数组“objectArray”所需的KVO方法。

  • 在界面声明中选择属性
  • 选择脚本(菜单栏中的脚本图标)>代码>放置访问器在剪贴板上放弃
  • 将声明粘贴到接口文件的适当位置
  • 选择“脚本”>“代码”>“将访问者定义”放置在剪贴板上
  • 将定义粘贴到实现文件的适当位置
  • 然后你可以使用一个看起来像的方法

    [self insertObject:test inObjectArrayAtIndex:0];
    
    链接地址: http://www.djcxy.com/p/43489.html

    上一篇: NSCollectionView draws nothing

    下一篇: Logging inside threads in a Rails application