2010-01-03 11 views
2

Je suis nouveau sur stackoverflow :) Mais je pense que c'est le bon endroit pour poser ma question. Je suis un nouveau développeur avec Cocoa et Objective-c & J'essaie d'écrire ma première application pour Mac: une application ToDo.Afficher plus d'un objet dans une ligne NSTableView

En ce moment, je peux enregistrer des tâches et les supprimer, mais maintenant, je veux ajouter des fonctionnalités comme CreationDate, certaines balises (dans mutablearray), et si la tâche est terminée ou non. Je ne travaille pas avec un ArrayController, j'enregistre le NSMutableArray encodé dans un fichier (Library/Application Support/AppName) et le lit à partir de là.

Tout cela doit être dans une ligne, parce qu'il est à la recherche comme ceci:

Current appearance http://img683.imageshack.us/img683/7595/bild2ss.png

Lorsque le titre est, devrait être le contenu du ToDo, où la Blue Box est, devrait être le statut (Bleu = défait, Gris = Terminé) et où Sous-titre est doit être la Date et les Tags (03.01.2009 - tag1, tag2, tag3)

Maintenant, comment ajouter des objets dans un mutablearray mais, si je veux tout enregistrer ces 4 informations dans ce tableau, je ne sais pas comment faire cela.

J'ai un modèle qui s'initialise avec ces 4 infomations, mais comment sauvegarder ceci? Dois-je sauvegarder ceci pour les informations dans un tableau et ce tableau dans mon mutablearray?

Répondre

6

La solution est en réalité l'opposé: Avoir un objet par rangée.

C'est là que votre calque de modèle (le M dans MVC) entre: L'objet de chaque ligne est un model object, une instance d'une classe que vous construisez, et l'icône, le titre et le sous-titre sont des propriétés de cet objet.

Ensuite, créez un custom cell pour votre colonne de table afin d'afficher l'objet modèle de cette manière. La cellule fait partie du calque View, le V de MVC. Le C dans MVC se trouve entre le modèle et la vue: c'est l'objet qui possède le modèle et est la source de données (par liaisons ou non) de la vue de table. La vue table récupère les objets modèles de cet objet pour les alimenter vers la cellule. Cet objet intermédiaire est un contrôleur.

+0

Vous n'avez pas nécessairement besoin de créer des cellules personnalisées pour cela. Vous pourriez obtenir une chaîne attribuée pour le titre et le sous-titre et utiliser un NSImageCell pour le statut. –

+0

Vrai, mais bourrer trois valeurs de propriété séparées dans une seule chaîne attribuée est une façon de le faire. Les afficher de cette manière spécifique est un travail View, et forger un NSAttributedString pour le faire devrait se faire dans le Controller ou le Model, les deux sections du code qui ne devraient pas se soucier de l'affichage. –

+0

je vous remercie pour votre aide, maintenant je travaille avec un contrôleur de tableau et j'ai 4 colonnes :) J'essaie de faire fonctionner cela ... – ahmet2106

1

Maintenant je l'ai!

Je n'ai qu'une seule cellule pour le contenu avec un contrôleur ArrayController.

Je définis les autres informations avec - (id) init pour chaque ligne.

Il y a 3 objets: contenu, statut et date, et pour chaque statut j'affiche une autre image (fait, défait, ...).

Merci beaucoup pour votre aide! J'essaye de finir la bêta pour tout le monde :)