Question

Je suis en train de mettre en place un NSCollectionView (je l'ai fait avec succès dans le passé, mais pour une raison quelconque, il échoue cette fois).

J'ai une classe de modèle appelé « TestModel », et il a une propriété NSString qui vient retourne une chaîne (uniquement à des fins de test en ce moment). J'ai alors une déclaration de propriété NSMutableArray dans ma classe principale délégué de l'application, et ce tableau ajouter des instances de l'objet TestModel.

J'ai alors un contrôleur RAID qui a son tableau de contenu lié le NSMutableArray du délégué de l'application. Je peux confirmer que tout jusqu'ici fonctionne très bien; NSLogging:

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

a bien fonctionné.

J'ai ensuite toutes les liaisons appropriées pour la vue de collecte mis en place, (itemPrototype et contenu), et pour la collection Voir article (vue). J'ai alors un champ de texte dans la vue de l'élément de collection qui est lié à la collection Voir Item.representedObject.teststring. Cependant rien affiche dans la vue de collection quand je commence l'application, juste un écran blanc. Qu'est-ce que je manque?

Mise à jour: Voici le code que j'utilise (demandé par 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

Et puis comme je l'ai dit le tableau contenu du contrôleur Array est lié à cette « objectArray », et le contenu du NSCollectionView est lié à Controller.arrangedObjects Array. Je peux vérifier que le contrôleur RAID les objets par NSLogging [arrayController arrangedObjects], et il retourne l'objet correct. Il est juste que rien n'affiche dans le NSCollectionView.

Mise à jour 2: Si je me connecte [contenu CollectionView] Je ne reçois rien:

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

Le problème est probablement là.

Mise à jour 3: Comme l'a demandé ici est le projet Xcode:

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

L'une application menubar, donc il n'a pas de fenêtre. Lorsque vous construisez et exécutez l'application, vous verrez un élément MenuBar qui dit « test », ce qui ouvre la vue qui contient le NSCollectionView.

Merci

Était-ce utile?

La solution

Le problème est que vous n'êtes pas correctement en utilisant KVC. Il y a deux choses que vous pouvez faire.

Méthode 1: simple mais pas si élégant

  1. Utilisez le code suivant pour ajouter l'objet au tableau

[[self mutableArrayValueForKey: @ "objectArray"] addObject: Test];

Ce n'est pas si élégante que vous devez spécifier la variable à l'aide d'une valeur de chaîne, de sorte que vous n'obtenir des avertissements du compilateur lorsque orthographié de manière incorrecte.

Méthode 2: Générer les méthodes KVO nécessaires pour le tableau "objectArray"

.
  1. Sélectionnez la propriété dans votre déclaration d'interface
  2. Sélectionnez Scripts (l'icône de script dans la barre de menus)> Code de> Lieu decls accesseurs sur Presse-papiers
  3. Coller les déclarations dans la endroit approprié dans votre fichier d'interface
  4. Sélectionnez Scripts> code> Lieu defs accesseurs sur Presse-papiers
  5. Coller les définitions contenues dans la     endroit approprié dans votre fichier d'implémentation

Vous pouvez ensuite utiliser une méthode qui ressemble à

[self insertObject:test inObjectArrayAtIndex:0];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top