Problème NSDocument

23:12 modifié dans Vos applications #1
Bonjour,

je suis entrain de bosser sur un projet permettant d'éviter les multiples fenêtres avec NSDocument.
Pour ce faire, j'ai simplement virer la fenêtre du nib de mon NSDocument puis j'initialise ce dernier :
<br />- (id)controller<br />{<br />return [[[self alloc] init] autorelease];<br />}<br />


Je stock ensuite le document dans une NSMutableArray.
Mais voilà , lorsque je fais :
<br />[docsArray removeObjectAtIndex:index];<br />

J'ai le debugger qui s'affiche et mon application plante.
Je suis sûr que c'est ça qui fait planter car si j'enlève cette ligne, je n'ai aucun problème.

Alors y aurai-t-il un autre moyen ?
Je me demande si en initialisant le NSDocument comme ceci :
<br />id doc = [[MyDocument alloc] init];<br />

Puis le virer en utilisant NSDocumentController :
<br />id doc = [docsArray objectAtIndex:index];<br />[docController removeDocument:doc];<br />[docsArray removeObjecAtIndex:index];<br />


Merci d'avance.
Louka

Réponses

  • 23:12 modifié #2
    Bon, t'as 2 possibilités: soit tu t'amuses à  contourner un système qui est en place pour une tache donnée (=une fenêtre n'appartient qu'à  un seul document), et dans ces cas là  tu vas t'amuser des heures pour arriver à  un truc qui risque de quand même poser quelques problèmes. Soit tu te renseignes sur la réelle utilité d'utiliser des documents dans ton appli. Si tu veux mon avis, il n'y en pas. Le seul aspect des documents qui pourrait t'intéresser dans ton cas est gérable par les NSFileWrapper, et pour gérer les ouvertures de fichier tu as ce qu'il faut dans les méthodes de délégué de NSApplication.
  • 23:12 modifié #3
    C'est effectivement les NSFileWrapper qui m'intéressent mais étant donné que j'ai plusieurs types de doc à  gérer (NSFileWrapper = MyDocument1 / NSData = MyDocument2), je préfère l'avantage des NSDocument.
    Comme ce que tu m'as proposé me chagriné un peu avec tout ce que j'ai pu réussir jusqu'à  maintenant en utilisant les NSDocument pour mon appli, j'ai essayé la méthode que j'ai posté.

    <br />// Ajout d&#39;un nouveau document type texte<br />id doc = [[TextDocument alloc] init];<br />[docsArray addObject:doc];<br />
    


    <br />// Supression à  la ligne sélectionnée<br />id doc = [docsArray objectAtIndex:index];<br />[documentController removeDocument:doc];<br />[docsArray removeObjectAtIndex:index];<br />
    

    Et là  ça marche
    :o
  • 23:12 modifié #4
    Si tu arrives, tant mieux. Je te conseille juste de faire attention lorsque tu utilises des toolkits aussi évolués que Cocoa lorsque tu dois faire autre chose que ce qui est prévu à  la base*: on y passe souvent des heures, pour un résultat qui n'est pas toujours satisfaisant, ou qui peut causer des problèmes lors d'une mise à  jour d'OS X.

    Personnellement, je serais quand même réticent à  utiliser [tt]removeDocument:[/tt] (cfr doc: c'est une méthode qui est appelée par le document lui même, tu auras donc des fuites mémoire si tu l'utilises comme tu le fais, il vaut mieux utiliser [tt]-close[/tt] de NSDocument, qui est vraiment fait pour).

    *surtout avec des classes comme NSDocument, qui sont quand même à  la base du développement d'applis et qui ont des "ramifications" un peu partout.
  • 23:12 modifié #5
    Ok merci Renaud 
Connectez-vous ou Inscrivez-vous pour répondre.