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

War es hilfreich?

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

  1. Verwenden Sie den folgenden Code, um das Objekt in das Array
  2. 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"

  1. Wählen Sie die Eigenschaft in der Interface-Deklaration
  2. Wählen Sie Skripts (das Skript-Symbol in der Menüleiste)>-Code> Platz Accessor decls auf Zwischenablage
  3. Fügen Sie die Erklärungen in der entsprechende Stelle in Ihrer Interface-Datei
  4. Wählen Sie Scripts>-Code> Platz Accessor defs auf Zwischenablage
  5. 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];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top