NSCollectionView disegna nulla
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
Soluzione
Il problema è che il tuo non correttamente utilizzando KVC. Ci sono due cose che puoi fare.
Metodo 1: Semplice ma non così elegante
- 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"
.- Selezionare la proprietà nella vostra dichiarazione di interfaccia
- Seleziona script (l'icona script nella barra dei menu)> Codice> Località decls accessor su Appunti
- Incolla le dichiarazioni del punto appropriato nel file di interfaccia
- Seleziona script> Codice> Località defs accessor su Appunti
- Incolla le definizioni di cui al punto appropriato nel file di implementazione
È possibile quindi utilizzare un metodo che assomiglia
[self insertObject:test inObjectArrayAtIndex:0];