Ir ao conteúdo

Posts recomendados

Postado

Estou tentando entender como se usa o NSTableView no Gorm. Vi num tutorial que as conexões devem ser feitas entre os controles e que a aplicação deve ter os métodos numberOfRowsInTableView e tableView, mas ainda não consegui fazer funcionar. Qual é a forma correta de usar esse controle?

 

Quando executo o programa dá este erro: Data Source doesn't respond to numberOfRowsInTableView,

 

sc1.png.c8e5ab22434f5b9d10e3f9f780c7e04c.png

 

 

Estas são as conexões que fiz entre NSOwner e delegate/dataSource com TableView,

 

sc2.png.d27735a2d445777956b0c87baf436141.png

 

Conexão entre NSOwner (Documento) e a Janela,

sc3.png.3367d9b3cd68a296e194f485c28c01e8.png

 

 

Documento.m,

#include <AppKit/AppKit.h>
#include "Documento.h"

@implementation Documento
    -(int)numberOfRowsInTableView:(NSTableView *)view{
        return 3;
    }
    -(id)tableView:(NSTableView *)view
        objectValueForTableColumn:(NSTableColumn *)column
        row:(int)row{

        return @"Teste";
    }
@end

 

Documento.h,

#include <AppKit/AppKit.h>

#ifndef _DOCUMENTO_H_
#define _DOCUMENTO_H_

@interface Documento : NSDocument{
  id tableView;
}
@end

#endif

 

Main.m,

#include <AppKit/AppKit.h>

int main(int argc, const char *argv[]){    
    return NSApplicationMain(argc,argv);
}

 

GNUmakefile,

include $(GNUSTEP_MAKEFILES)/common.make

APP_NAME = Tabela
$(APP_NAME)_HEADERS = Documento.h
$(APP_NAME)_OBJC_FILES = main.m Documento.m
$(APP_NAME)_RESOURCE_FILES = $(APP_NAME).gorm
$(APP_NAME)_MAIN_MODEL_FILE = $(APP_NAME).gorm

include $(GNUSTEP_MAKEFILES)/application.make

 

  • Moderador
Postado

@Midori Não apagamos tópicos resolvidos. 

Se você achou a solução, por gentileza, poste aqui  a resposta, para que ajude outras pessoas com a mesma dúvida.

  • Curtir 1
Postado

Consegui fazer criando dois aplicativos no Gorm,

 

O primeiro é um projeto em branco (sem janela) que salvei como Planetas.gorm

 

O outro é o Documento.gorm onde fiz as conexões que comentei no primeiro post e coloquei a janela com os controles (tableview, botões, etc) e ficou assim,

 

app.png.df8b325507aa0af227321492fdd021c5.png

 

Só não consegui alterar o título da janela. No Gorm coloquei como Planetas, mas quando executo fica como Untitled.

 

Parte do .H com a estrutura  dos planetas,

 

#import <AppKit/AppKit.h>

#define PLANETAS 8

#define PI  3.1416
#define G   6.67E-11

#define CMP(A,B)([A isEqualToString: B])
#define FSTR(F) ([self floatParaStr: F])

#define ID_PLANETA  @"colPlaneta"
#define ID_DIST     @"colDistancia"
#define ID_RAIO     @"colRaio"
#define ID_MASSA    @"colMassa"

typedef struct{
    float massa;
    float distancia;
    float raio;
    NSString *nome;
}TPlaneta;

static const TPlaneta planeta[PLANETAS] = {
    {3.30E+23, 5.79E+07, 2.44E+03, @"Mercúrio"},
    {4.67E+24, 1.08E+08, 6.05E+03, @"Vênus"},
    {5.97E+24, 1.50E+08, 6.37E+03, @"Terra"},
    {6.39E+23, 2.28E+08, 3.39E+03, @"Marte"},
    {1.90E+27, 7.79E+08, 6.99E+04, @"Júpiter"},
    {5.68E+26, 1.43E+09, 5.82E+04, @"Saturno"},
    {8.68E+25, 2.78E+09, 2.56E+04, @"Urano"},
    {1.02E+26, 4.50E+09, 2.46E+04, @"Netuno"}
};

...

 

Os métodos necessários necessários para carregar o NSTableView,

 

@implementation CDocumento   
    -(NSString *)windowNibName{
        return @"Documento.gorm";
    }

    -(int)numberOfRowsInTableView:(NSTableView *)view{
        return PLANETAS;
    }
    
    -(id)tableView:(NSTableView *)view
        objectValueForTableColumn:(NSTableColumn *)column row:(int)row{
            NSString *idCol = [column identifier];
            NSString *campo = nil;

            if(CMP(idCol,ID_PLANETA)){campo = planeta[row].nome;}
            if(CMP(idCol,ID_DIST)){campo = FSTR(planeta[row].distancia);}
            if(CMP(idCol,ID_RAIO)){campo = FSTR(planeta[row].raio);}
            if(CMP(idCol,ID_MASSA)){campo = FSTR(planeta[row].massa);}
            return campo;
    }
...

 

 

Para colocar os dados no NSTablView criei o arquivo PlanetasInfo.plist. A parte mais importante é NSTypes onde informo onde está a classe CDocumento,

 

{
    ApplicationDescription = "Planetas";
    ApplicationName = Planetas;
    ApplicationRelease = 1.0;    
    NSTypes = (
        {
            NSName = "plan";
            NSHumanReadableName = "Tabela dos Planetas";
            NSUnixExtensions = ("plan");
            NSRole = Editor;
            NSDocumentClass = CDocumento;
        }
    );
}

 

GNUmakefile,

include $(GNUSTEP_MAKEFILES)/common.make

APP_NAME = Planetas

$(APP_NAME)_OBJC_FILES = main.m CDocumento.m
$(APP_NAME)_RESOURCE_FILES = $(APP_NAME)Info.plist \
	$(APP_NAME).gorm Documento.gorm
$(APP_NAME)_MAIN_MODEL_FILE = $(APP_NAME).gorm

include $(GNUSTEP_MAKEFILES)/application.make

 

  • 2 anos depois...
Postado
Em 14/12/2020 às 17:00, Midori disse:

Quando executo o programa dá este erro: Data Source doesn't respond to numberOfRowsInTableView

Uma coisa que você tem que tomar cuidado em Objective-C é que esta é uma linguagem dinâmica. Erros são adiados à execução do programa. Felizmente, o compilador avisa por possíveis mensagens que não podem ser respondidas.

 

Em 16/12/2020 às 10:40, Midori disse:
static const TPlaneta planeta[PLANETAS] = {
    {3.30E+23, 5.79E+07, 2.44E+03, @"Mercúrio"},
    {4.67E+24, 1.08E+08, 6.05E+03, @"Vênus"},
    {5.97E+24, 1.50E+08, 6.37E+03, @"Terra"},
    {6.39E+23, 2.28E+08, 3.39E+03, @"Marte"},
    {1.90E+27, 7.79E+08, 6.99E+04, @"Júpiter"},
    {5.68E+26, 1.43E+09, 5.82E+04, @"Saturno"},
    {8.68E+25, 2.78E+09, 2.56E+04, @"Urano"},
    {1.02E+26, 4.50E+09, 2.46E+04, @"Netuno"}
};

Porque não declarar em uma classe?

 

@interface Planeta: NSObject

typedef struct {

  float massa,

  distancia,

  raio;

  NSString *nome;

} TPlaneta;

 

+ (TPlaneta) planeta: (int) i;

@end

 

@implementation Planeta

static TPlaneta planeta[] = {
  {3.30E+23, 5.79E+07, 2.44E+03, @"Mercúrio"},
  {4.67E+24, 1.08E+08, 6.05E+03, @"Vênus"},
  {5.97E+24, 1.50E+08, 6.37E+03, @"Terra"},
  {6.39E+23, 2.28E+08, 3.39E+03, @"Marte"},
  {1.90E+27, 7.79E+08, 6.99E+04, @"Júpiter"},
  {5.68E+26, 1.43E+09, 5.82E+04, @"Saturno"},
  {8.68E+25, 2.78E+09, 2.56E+04, @"Urano"},
  {1.02E+26, 4.50E+09, 2.46E+04, @"Netuno"}
};

 

+ (TPlaneta) planeta: (int) i

{

  return planeta[i];

}

@end

 

Se você está programando em Objective-C, o ideal é fazer tudo em classes.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!