NSCollectionView zieht nichts
Frage
Ich versuche, eine NSCollectionView
einzurichten (Ich habe dies in der Vergangenheit erfolgreich getan, aber aus irgendeinem Grund fehlschlägt es dieses Mal).
Ich habe ein Modell Klasse namens „TestModel“, und es hat eine NSString
Eigenschaft, die nur einen String zurückgibt (nur für Testzwecke im Augenblick). Ich habe dann eine NSMutableArray
Eigenschaft Erklärung in meinem Haupt AppDelegate Klasse, und auf dieses Array ich hinzufügen Instanzen des TestModel
Objekts.
ich dann ein Array-Controller haben, das seinen Inhalt Array hat verpflichtet, die NSMutableArray
App delegieren. Ich kann hier, dass alles bestätigt up funktioniert gut; NSLogging:
[[[arrayController arrangedObjects] objectAtIndex:0] teststring]
hat gut funktioniert.
Ich habe dann alle die entsprechenden Bindungen für die Sammlung Ansicht einrichten, (itemPrototype und Inhalt), und für die Sammlung Ansicht Artikel (Ansicht). Ich habe dann ein Textfeld in der Auflistelement Ansicht, der Sammlung Ansicht Item.representedObject.teststring
gebunden ist. Aber nichts wird in der Sammlung Ansicht, wenn ich starten Sie die App, nur einen leeren weißen Bildschirm. Was bin ich?
UPDATE: Hier ist der Code, den ich Gebrauch (von Wil Shipley angefordert):
// 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
Und dann wie ich schon sagte der Inhalt Array des Array-Controller auf diese „objectArray“, und der Inhalt des NSCollectionView an Array Controller.arrangedObjects gebunden ist, gebunden ist. Ich kann überprüfen, ob die Array-Controller die Objekte darin durch NSLogging [Arraycontroller arrangedObjects] hat, und es gibt das richtige Objekt. Es ist nur, dass nichts wird in der NSCollectionView.
UPDATE 2: Wenn ich [Collection content] log ich nichts:
2009-10-21 08:02:42.385 CollViewTest[743:a0f] (
)
Das Problem ist wahrscheinlich es.
UPDATE 3: Wie gewünscht hier ist das Xcode-Projekt:
http://www.mediafire.com/?mjgdzgjjfzw
Es ist eine menubar App, so hat es keine Fenster. Wenn Sie die App bauen und führen Sie einen menubar Artikel sehen werden, die „test“ sagt, dies öffnet die Ansicht, dass der NSCollectionView enthält.
Danke
Lösung
Das Problem ist, dass Ihr nicht richtig KVC verwenden. Es gibt zwei Dinge, die Sie tun können.
Methode 1: Einfach, aber nicht so elegant
- Verwenden Sie den folgenden Code, um das Objekt in das Array hinzufügen
[[self mutableArrayValueForKey: @ "objectArray"] addObject: test];
Das ist nicht so elegant wie Sie die Variable angeben einen String-Wert verwenden, so dass Sie keine Warnungen Compiler erhalten, wenn falsch geschrieben.
. Methode 2: Generieren der KVO-Methoden, die für die Anordnung "objectArray"
- Wählen Sie die Eigenschaft in der Interface-Deklaration
- Wählen Sie Skripts (das Skript-Symbol in der Menüleiste)>-Code> Platz Accessor decls auf Zwischenablage
- Fügen Sie die Erklärungen in der entsprechende Stelle in Ihrer Interface-Datei
- Wählen Sie Scripts>-Code> Platz Accessor defs auf Zwischenablage
- Fügen Sie die Definitionen in der entsprechende Stelle in Ihrer Implementierungsdatei
Sie können dann eine Methode verwenden, das aussieht wie
[self insertObject:test inObjectArrayAtIndex:0];