Domanda

Sto cercando di impostare un NSCollectionView (ho fatto con successo in passato, ma per qualche motivo viene a mancare questa volta).

ho una classe di modello chiamato "TestModel", e ha una proprietà NSString che solo restituisce una stringa (solo a scopo di test in questo momento). Ho poi ho una dichiarazione di proprietà NSMutableArray nella mia classe principale applicazione delegato, e per questo array aggiungo istanze dell'oggetto TestModel.

Poi ho un controller di array che ha la sua matrice Content legato NSMutableArray l'applicazione del delegato. Posso confermare che tutto fino a qui funziona bene; NSLogging:

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

ha funzionato bene.

Ho poi tutte le associazioni appropriate per la visualizzazione di raccolta istituito, (itemPrototype e contenuto), e per la Collezione Visualizza Articolo (vista). Ho poi avuto un campo di testo nella visualizzazione voce della raccolta che è destinata a Collection View Item.representedObject.teststring. Tuttavia NIENTE visualizza nella visualizzazione raccolta quando inizio l'applicazione, solo uno schermo bianco in bianco. Che cosa mi manca?

UPDATE: Ecco il codice che uso (richiesto da Shipley wil):

// 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 poi, come ho detto l'array contenuto del controller di array è legato a questo "objectArray", e il contenuto del NSCollectionView è destinato a Controller.arrangedObjects Array. Posso verificare che il controller di array ha gli oggetti in esso da NSLogging [arrayController arrangedObjects], e restituisce l'oggetto giusto. Il suo solo che nulla viene visualizzato nel NSCollectionView.

UPDATE 2: Se entro [contenuti CollectionView] non ottengo niente:

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

Il problema è probabilmente lì.

UPDATE 3: Come richiesto ecco il progetto Xcode:

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

E 'un app barra dei menu, in modo che non ha una finestra. Quando si genera e si esegue l'applicazione vedrete un elemento barra dei menu che dice "test", questo apre la vista che contiene il NSCollectionView.

Grazie

È stato utile?

Soluzione

Il problema è che il tuo non correttamente utilizzando KVC. Ci sono due cose che puoi fare.

Metodo 1: Semplice ma non così elegante

  1. Utilizza il seguente codice per aggiungere l'oggetto alla matrice

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

Questa non è così elegante come si deve specificare la variabile con un valore di stringa, quindi non sarà possibile ottenere avvisi del compilatore quando farro in modo non corretto.

Metodo 2: Generare i metodi KVO necessari per la matrice "objectArray"

.
  1. Selezionare la proprietà nella vostra dichiarazione di interfaccia
  2. Seleziona script (l'icona script nella barra dei menu)> Codice> Località decls accessor su Appunti
  3. Incolla le dichiarazioni del punto appropriato nel file di interfaccia
  4. Seleziona script> Codice> Località defs accessor su Appunti
  5. Incolla le definizioni di cui al     punto appropriato nel file di implementazione

È possibile quindi utilizzare un metodo che assomiglia

[self insertObject:test inObjectArrayAtIndex:0];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top