Как я могу использовать NSArray и NSArrayController с основными данными?

StackOverflow https://stackoverflow.com/questions/1023378

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть код, которому для работы необходим доступ к NSArray.У меня есть NSArray, который я использую с Core Data, и в нем будут данные, но я не уверен, как заставить мой NSArrayController получить доступ к NSArray.

Я не могу просто объявить это в заголовочном файле следующим образом: NSArray *objectArray; потому что он не знает, как и что NSArray для доступа.Как именно мне получить доступ к NSArray, который я использую с Core Data?

Мой файл заголовка:

#import <Cocoa/Cocoa.h>


@interface MyOutlineView : NSOutlineView {
    NSArrayController* objectArray;
}

@end

Мой файл реализации:

#import "MyOutlineView.h"

@implementation MyOutlineView

- (void) outlineView: (NSOutlineView *) aView
     willDisplayCell: (id) aCell
      forTableColumn: (NSTableColumn *)aColumn
                item: (id) anItem
{
    id rootObj = anItem;
    unsigned row = [aView rowForItem:anItem];

    [aCell setDrawsBackground: YES];

    while ([aView levelForRow:row] != 0) {
        row --;
        rootObj = [aView itemAtRow:row];
    }

    // The colours here are foul and ugly.  Use something else, for
    // God's sake!
    if( [objectArray indexOfObject:rootObj] % 2 )
        [aCell setBackgroundColor: [NSColor yellowColor]];
    else
        [aCell setBackgroundColor: [NSColor blueColor]];
}

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

Решение

Я создал тестовое приложение с IBOutlet, подключенным к NSArrayController из Xib.В этом тесте у меня есть:

  • запуск из шаблона приложения Core Data;
  • создал Entity в модели данных с двумя атрибутами (строка, int);

в Сибе:

  • Контроллер массива с контекстом управляемого объекта, подключенный к Test_AppDelegate.managedObjectContext;
  • TableView с столбцами, подключенными к первому и второму атрибуту ArrayObjects контроллера массива;
  • Кнопки «Добавить» и «Удалить», связанные с добавлением контроллера массива:и удалите:действия;
  • Кнопка «Показать счетчик» и метка;-

в коде (Test_AppDelegate.*):

  • IBOutlet NSArrayController *ac;(подключен в Xib от Test_AppDelegate.ac к контроллеру массива);
  • IBOutlet NSTextField *nLabel;(подключен в Xib к Label);
  • (IBAction) showNum: (id) отправитель;(подключается через кнопку «Показать счетчик»);
  • код в действии showNum:[nLabel setIntValue:[[ac ArrangedObjects] count]];

Я могу:

  • Добавлять/удалять объекты в табличном виде и управляемом массиве;
  • Получите доступ к NSArrayController из кода, чтобы получить массив организованных объектов.

Таким образом, привязка IBOutlet из кода к контроллеру массива Xib и доступ к его упорядоченным объектам должны работать.

Другие советы

Возможно, я этого не понимаю, но разве вы не можете просто создать метод initWithArray?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top