Como posso usar um NSArray e NSArrayController com Core Data?
-
06-07-2019 - |
Pergunta
Eu tenho algum código que precisa acessar um NSArray ao trabalho. Eu tenho um NSArray que estou usando com Core Data e terá dados nele, mas estou inseguro como fazer o meu acesso NSArrayController o NSArray.
Eu não posso simplesmente declará-lo no arquivo de cabeçalho como este: NSArray *objectArray;
porque não sabem como ou onde NSArray
acesso. Como exatamente eu acessar o NSArray Estou usando com Core Data?
Meu cabeçalho do arquivo:
#import <Cocoa/Cocoa.h>
@interface MyOutlineView : NSOutlineView {
NSArrayController* objectArray;
}
@end
Minha implementação do arquivo:
#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
Solução
Eu fiz um aplicativo de teste com IBOutlet conectado a NSArrayController de Xib. Neste teste eu tenho:
- iniciado a partir do núcleo modelo de aplicativo de dados;
- criado Entidade modelo de dados com dois atributos (String, int);
em Xib:
- Controlador da Matriz com o contexto de objeto gerenciado, ligado a Test_AppDelegate.managedObjectContext;
- TableView com cols conectados à matriz de primeiro e segundo atributo da arrangedObjects Controladoria;
- Adicionar e remover botões, ligados ao add matriz do Controlador: e remover: ações;
- O botão "Show Conde" e etiqueta; -
no código (Test_AppDelegate *.):
- IBOutlet NSArrayController * ac; (Ligado em Xib de Test_AppDelegate.ac a matriz Controller);
- IBOutlet NSTextField * nLabel; (Ligado em Xib a etiqueta);
- (IBAction) showNum: (id) remetente; (Conectado a partir de botão "Mostrar Contagem");
- código em ação showNum: [NLabel setIntValue: [[arrangedObjects AC] contar]];
Eu sou capaz de:
- Adicionar / Remover objetos para visualizar a tabela e variedade controlada;
- Acesso NSArrayController de código para obter variedade arrangedObjects.
Assim, a ligação IBOutlet de código para matriz Controlador de Xib e acessar seus arrangedObjects deve funcionar.
Outras dicas
Eu poderia não estar recebendo este - mas você não pode simplesmente criar um método initWithArray