Вопрос

Я пытаюсь настроить NSCollectionView (Раньше я успешно это делал, но на этот раз по какой-то причине это не удалось).

У меня есть класс модели под названием «TestModel», и у него есть NSString свойство, которое просто возвращает строку (сейчас только в целях тестирования).тогда у меня есть NSMutableArray объявление свойства в моем основном классе делегата приложения, и в этот массив я добавляю экземпляры TestModel объект.

Затем у меня есть контроллер массива, массив содержимого которого привязан к делегату приложения. NSMutableArray.Я могу подтвердить, что до сих пор все работает нормально;НСлогигинг:

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

работал нормально.

Затем у меня есть все соответствующие привязки для настройки представления коллекции (itemPrototype и содержимое) и для элемента представления коллекции (представления).Затем у меня есть текстовое поле в представлении элемента коллекции, привязанное к представлению коллекции. Item.representedObject.teststring.Однако, когда я запускаю приложение, НИЧЕГО не отображается в представлении коллекции, просто пустой белый экран.Что мне не хватает?

ОБНОВЛЯТЬ:Вот код, который я использую (по запросу Уилла Шипли):

// 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

И затем, как я уже сказал, массив содержимого контроллера массива привязан к этому «objectArray», а содержимое NSCollectionView привязано к Array Controller.arrangedObjects.Я могу проверить, что в контроллере массива есть объекты, с помощью NSLogging [arrayController ArrangeObjects], и он возвращает правильный объект.Просто в NSCollectionView ничего не отображается.

ОБНОВЛЕНИЕ 2:Если я зарегистрирую [содержимое коллекцииView], я ничего не получу:

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

Проблема, вероятно, там.

ОБНОВЛЕНИЕ 3:По запросу здесь представлен проект Xcode:

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

Это приложение в виде меню, поэтому у него нет окон.Когда вы создадите и запустите приложение, вы увидите пункт меню с надписью «тест». Это открывает представление, содержащее NSCollectionView.

Спасибо

Это было полезно?

Решение

Проблема в том, что вы неправильно используете KVC.Есть две вещи, которые вы можете сделать.

Метод 1:Просто, но не так элегантно

  1. Используйте следующий код, чтобы добавить объект в массив

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

Это не так элегантно, поскольку вам придется указывать переменную, используя строковое значение, поэтому вы не получите предупреждений компилятора при неправильном написании.

Метод 2:Создайте методы KVO, необходимые для массива objectArray.

  1. Выберите свойство в объявлении интерфейса.
  2. Выберите Scripts (значок скрипта в Menubar)> Code> Поместите Decsester Decsest в буфере обмена
  3. Вставьте объявления в соответствующее место в файл интерфейса
  4. Выберите Scripts> Code> Поместите аксессуар Defs в буфер обмена
  5. Вставьте определения в соответствующее место в файл реализации

Затем вы можете использовать метод, который выглядит как

[self insertObject:test inObjectArrayAtIndex:0];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top