我正在尝试设置NSCollectionView(我过去已经成功完成此操作,但是由于某种原因这次失败了)。

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

然后,我有了一个数组 Controller ,其内容数组绑定(bind)了应用程序委托(delegate)的NSMutableArray。我可以确认到这里为止一切正常。 NSLogging:

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

工作正常。

然后,我将为集合 View (itemPrototype和内容)以及集合 View 项( View )建立所有适当的绑定(bind)。然后,我在绑定(bind)到Collection View Item.representedObject.teststring的collection item View 中有一个文本字段。但是,当我启动应用程序时,收藏夹 View 中什么也没有显示,只是一个空白的空白屏幕。我想念什么?

更新:这是我使用的代码(由威尔·史普利要求):
// 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

然后就像我说的那样,数组 Controller 的内容数组绑定(bind)到此“objectArray”,而NSCollectionView的内容绑定(bind)到数组Controller.arrangedObjects。我可以通过NSLogging [arrayController DrawnedObjects]验证数组 Controller 中是否包含对象,并且它返回正确的对象。只是没有任何东西显示在NSCollectionView中。

更新2:如果我登录[collectionView内容],我什么也没得到:
2009-10-21 08:02:42.385 CollViewTest[743:a0f] (
)

问题可能在那里。

更新3:根据要求,这里是Xcode项目:

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

它是一个菜单栏应用程序,因此没有窗口。在构建和运行应用程序时,您会看到一个菜单栏项目“test”,这将打开包含NSCollectionView的 View 。

谢谢

最佳答案

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

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

  • 使用以下代码将对象添加到
  • 数组中

    [[self mutableArrayValueForKey:@“objectArray”] addObject:test];

    这不是很优雅,因为您必须使用字符串值来指定变量,因此,如果拼写错误,您将不会收到编译器警告。

    方法2:生成数组“objectArray”所需的KVO方法。
  • 在接口(interface)声明
  • 中选择属性
  • 选择脚本(菜单栏中的脚本图标)>代码>放置
    剪贴板
  • 上的访问器decls
  • 将声明粘贴到
    界面文件
  • 中的适当位置
  • 选择脚本>代码>放置
    剪贴板
  • 上的访问器定义
  • 将定义粘贴到
    实现文件
  • 中的适当位置

    然后,您可以使用一种看起来像
    [self insertObject:test inObjectArrayAtIndex:0];
    

    关于objective-c - NSCollectionView什么也没画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1598086/

    10-12 01:47