2010-05-20 8 views
0

J'ai récemment commencé un autre thread sans un compte, donc je suis la traduction de la question ici avec un compte afin que je puisse éditer les liens actuels au programme afin que d'autres utilisateurs puissent suivre cela. J'ai également mis à jour le code ci-dessous. Voici ma question initiale:Cocoa NSOutlineView et glisser-déposer

J'ai lu l'autre article ici sur Outlineviews et le MDN, mais je n'arrive pas à faire fonctionner mon programme. Au bas de ce post est un lien vers un zip de mon projet. C'est très basique avec seulement un aperçu et un bouton. Je veux qu'il reçoive des fichiers texte, mais quelque chose ne va pas avec mon code ou mes connexions. J'ai essayé de suivre le code d'exemple d'Apple de leur NSOutline Drag and Drop, mais il me manque quelque chose. 1 différence est mon programme est un document basé sur le programme et leur exemple n'est pas. J'ai défini le propriétaire du fichier pour qu'il reçoive des actions de délégué, puisque c'est là que se trouve mon code pour gérer le glisser-déposer, ainsi qu'une action sur un bouton. C'est probablement une simple erreur, alors quelqu'un peut-il regarder s'il vous plaît et me dire ce que je fais mal? Voici un lien vers le fichier: http://dl.dropbox.com/u/7195844/OutlineDragDrop1.zip

+0

"Je souhaite que les fichiers texte y soient déposés" Qu'entendez-vous par là? Lâché dans la vue de plan, ou sur la tuile Dock de l'application? –

+0

Aussi, n'oubliez pas de vérifier le résultat de '[super init]'. Ne supposez pas que cela a réussi. Toutes vos affectations aux variables d'instance dans vos méthodes 'init' doivent être dans les blocs' if (self) '. (Vous pouvez également intégrer l'affectation dans la condition, comme c'est souvent le cas dans le code Cocoa, mais cela dépend de vos préférences de style.) –

Répondre

8

Vous ne répondez pas au message de validation de glissement de NSOutlineView.

Your original code mis en œuvre tableView:validateDrop:proposedRow:proposedChildIndex:. Comme je l'ai souligné sur cette question, c'est faux quand votre vue de table est une vue d'ensemble; NSOutlineView n'enverra pas de message de validation de glissement de vue de table, mais uniquement un message de validation de glissement de vue de contour.

Vous avez changé depuis votre méthode glisser-validation pour être déclarée comme ceci:

- (NSDragOperation)outlineView:(NSOutlineView*)view 
       validateDrop:(id <NSDraggingInfo>)info 
       proposedRow:(int)row 
      proposedChildIndex:(NSInteger)index 

Mais rien envoie en fait un tel message. Rappelez-vous que NSOutlineView traite rarement les index de ligne, car ceux-ci peuvent changer lorsque les lignes parentes sont développées et réduites. Il traite plutôt des "items", qui sont généralement des objets modèles.

Par conséquent, la méthode de validation correcte est:

- (NSDragOperation)outlineView:(NSOutlineView*)view 
       validateDrop:(id <NSDraggingInfo>)info 
       proposedItem:(id)item 
      proposedChildIndex:(NSInteger)index 

Remarquez le nom du troisième composant du sélecteur, et le type et le nom de l'argument qui va avec.

Lorsque cette modification est appliquée, votre source de données valide les chutes.

Questions connexes