Pergunta

Estou tentando configurar um NSCollectionView (Eu fiz isso com sucesso no passado, mas por algum motivo falha desta vez).

Eu tenho uma classe modelo chamada "testmodel" e tem um NSString Propriedade que apenas retorna uma string (apenas para fins de teste agora). Eu então tenho um NSMutableArray Declaração de propriedade na minha classe principal de delegados de aplicativos e, nessa matriz, adiciono instâncias do TestModel objeto.

Eu tenho então um controlador de matriz que tem sua matriz de conteúdo ligada ao delegado do aplicativo NSMutableArray. Posso confirmar que tudo até aqui está funcionando bem; NSLogging:

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

funcionou bem.

Eu tenho então todas as ligações apropriadas para a visualização de coleção configurada (itemPrototype e conteúdo) e para o item de exibição da coleção (exibição). Eu tenho então um campo de texto na visualização do item de coleção que está vinculada à visualização da coleção Item.representedObject.teststring. No entanto, nada aparece na visualização da coleção quando inicio o aplicativo, apenas uma tela branca em branco. o que estou perdendo?

ATUALIZAÇÃO: Aqui está o código que eu uso (solicitado por 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

E então, como eu disse, a matriz de conteúdo do controlador de matriz está vinculada a esse "objectArray", e o conteúdo do NSCOLLECTIONVIEW é obrigado a matriz controller.arrangeDObjects. Posso verificar se o controlador de matriz possui os objetos nele por NSLogging [ArrayController OrganizedObjects] e retorna o objeto correto. É apenas que nada aparece no NSCOLLECTIONVIEL.

ATUALIZAÇÃO 2: Se eu registrar [Conteúdo da Coleção -View], não recebo nada:

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

O problema provavelmente está lá.

ATUALIZAÇÃO 3: Conforme solicitado aqui é o projeto Xcode:

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

É um aplicativo Menubar, por isso não tem janela. Ao criar e executar o aplicativo, verá um item da Menubar que diz "teste", isso abre a visualização que contém o NSCOLLECTIONVIEL.

Obrigado

Foi útil?

Solução

O problema é que você não está usando o KVC corretamente. Há duas coisas que você pode fazer.

Método 1: Simples, mas não tão elegante

  1. Use o seguinte código para adicionar o objeto à matriz

[auto -mutableArrayValueKey:@"objectArray"] addObject: test];

Isso não é tão elegante quanto você deve especificar a variável usando um valor de string, portanto, você não receberá avisos do compilador quando escritos incorretamente.

Método 2: Gere os métodos KVO necessários para a matriz "ObjectArray".

  1. Selecione a propriedade em sua declaração de interface
  2. Selecione scripts (o ícone do script no Menubar)> Código> Place Accessor Decls na área de transferência
  3. Cole as declarações no local apropriado no seu arquivo de interface
  4. Selecione Scripts> Código> Place Acessor defs na área de transferência
  5. Cole as definições no local apropriado em seu arquivo de implementação

Você pode então usar um método que se parece

[self insertObject:test inObjectArrayAtIndex:0];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top