2010-12-06 28 views
1

Je suis nouveau à la programmation Objective-C et Cocoa (provenant d'un arrière-plan de développement C/C++ il y a des années sur d'autres plateformes). J'écris une application pour télécharger des données distantes sur une base récurrente (c'est-à-dire chaque X nombre de secondes), analyser, trier/filtrer dans un NSArray, et afficher/mettre à jour lesdites données dans un NSTableView. Après avoir lu quelques livres, beaucoup de matériel de référence Apple OS X et expérimenté, j'ai réussi à tout implémenter (téléchargement de données à distance, logique d'analyse/filtrage, stockage en mémoire, etc.) sauf la mise à jour de NSTableView avec les données . Je ne suis pas sûr si je manque quelque chose d'évident ou juste comment mon application devrait être présentée suivant le concept de MVC, ou si le manque de génération réelle de code d'Interface Builder n'est pas ce que je suis habitué, mais je ne peux pas semble déterminer comment je peux accéder par programme/manipuler le NSTableView qui a été créé dans Interface Builder.Comment accéder par programme à un NSTableView créé dans Interface Builder?

J'ai essayé (dans Interface Builder) de faire glisser une instance NSObject de mon objet basé sur NSArray, où - alors je peux connecter la source/datasource de mon NSTableView, mais cela entraîne une autre instance de mon objet NSArray (non connexion de NSTableView à mon objet existant, déclaré et instancié par programmation). De même, j'ai pensé à définir la source de données de mon NSTableView par programmation, mais je n'ai pas pu déterminer comment je pourrais programmer l'objet NSTableView stocké dans le fichier .xib/.nib autrement que via un Tag (pour lequel je n'ai pas pu pour déterminer l'objet à partir duquel appeler la méthode viewWithTag:, après avoir défini la valeur Tag de NSTableView dans Interface Builder).

Toutes les suggestions, avis, conseils ou guides seraient appréciés. Cela ressemble à une de ces choses qui seront très simples (et une fois que je l'aurai travaillé en face de moi, cela aura beaucoup plus de sens), mais je n'arrive pas à avoir un point de départ/exemple de travail.

+1

Avez-vous un 'IBOutlet NSTableView' dans le fichier d'en-tête de votre classe? – BoltClock

+2

Je vous recommande d'acheter l'un des livres de développement pour iPhone débutant car il couvre le processus typique dans ces articles - créer l'en-tête, assigner IBOutlets, exécuter IB, attacher l'interface graphique à IBOutlets, etc. – KevinDTimm

+0

... ou au moins lire le documentation introductive Apple fournit gratuitement, directement à partir de la page developer.apple.com ... –

Répondre

2

Vous devez joindre une variable d'instance dans la classe de contrôleur de votre table à la table du constructeur d'interface. Déclarer une table dans votre classe comme ceci:

IBOutlet NSTableView* myTable; 

... 

@property (nonatomic, retain) IBOutlet NSTableView* myTable; 

Et assurez-vous de les synthétiser.

Dans l'onglet Connexions de la fenêtre d'informations du Générateur d'interface, connectez la nouvelle prise de votre contrôleur à votre table. Ensuite, lorsque votre vue est chargée depuis le XIB, cette prise sera connectée.

Espérons que ça aide.

+0

OK, donc je mets à jour ma classe pour inclure 'IBOutlet NSTableView * myTable;', et le synthétise aussi. Dans Interface Builder, je glisse sur un objet et définit son identité de classe dans ma classe. Ensuite, je fais glisser une connexion à partir de myTable Outlet de l'objet -> NSTableView? Je pense que cela me laisse avec le même problème si ...NSTableView est maintenant connecté, mais il est connecté à un objet qui est instancié à partir du .xib/.nib (pas mon objet instancié par programmation qui contient les données que je souhaite afficher dans NSTableView), non? – DAz

+0

Si vous utilisez un fichier XIB distinct, l'objet "propriétaire du fichier" doit être défini sur votre classe et la prise connectée. Si vous utilisez tout dans un XIB, assurez-vous d'avoir un point de vente à l'intérieur de quelque chose auquel vous avez déjà accès, en créant une hiérarchie de points de vente au besoin. Votre niveau supérieur dans ce second cas sera probablement dans votre délégué d'application. – slycrel