Как я могу использовать NSArray и NSArrayController с основными данными?
-
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?