Bienvenue invité ( Connexion | Inscription )
8 May 2019, 03:07
Message
#1
|
|
![]() Adepte de Macbidouille ![]() Groupe : Validating Messages : 192 Inscrit : 15 May 2005 Lieu : Buenos Aires - Argentina Membre no 39 263 |
Bonjour à tous,
pour une application MacOS que je voudrais programmer, je cherche à placer une (plusieurs) tableView dans un NSDocument. Dans le StoryBoard, dans la fenêtre document, je fais le lien entre la tableView et un ArrayController. Tout ça fonctionne correctement. Ce que je n'arrive pas à faire, c'est la sauvegarde des données du document, et donc des données de la TableView. Quelqu'un aurait-il un lien vers un tutoriel qui explique comment faire? J'ai beau chercher sur Google, je n'ai pas réussi à trouver quelque chose qui me satisfasse. Merci d'avance... -------------------- MacBook Air 13'', 8Go RAM, 256 Go / MacBook Pro, 8Go RAM, 500Go / MacMini Intel (2006), 2Go RAM, 500Go
|
|
|
|
![]() |
13 May 2019, 00:03
Message
#2
|
|
![]() Adepte de Macbidouille ![]() Groupe : Validating Messages : 192 Inscrit : 15 May 2005 Lieu : Buenos Aires - Argentina Membre no 39 263 |
Je continue sur ma lancée parce que je suis confronté à une erreur qui semble être une erreur d'encodage. Comme je l'avais montré dans les messages précédents, ma structure Sound a un attribut fileUrl, que je passe en String. Ma tableView ne l'affiche pas mais l'attribut est bien présent dans la datasource.
Quand je sauvegarde mon document, tout va bien. Quand j'ouvre un document tout va bien et les données de chaque Sound apparaissent bien dans la table. Avec un print dans la console, je peux voir que l'attribut fileUrl est correct aussi. Dans un autre endroit de mon interface, j'affiche les détails qui ne sont pas dans la table lorsque je sélectionne une ligne. Le soundAsset me sert à déterminer la longueur du son qui est associé au fichier dans la fileUrl. Code func tableViewSelectionDidChange(_ notification: Notification) { let row = soundTableView.selectedRow if row != -1 { let sound = sounds[row] let soundAsset = AVURLAsset(url: URL(string: sound.fileUrl)!) durationField.stringValue = formatTime(time: CMTimeGetSeconds(soundAsset.duration)) beginsAtTextField.stringValue = formatTime(time: sound.beginsAt) endsAtTextField.stringValue = formatTime(time: sound.endsAt) } } Lorsque j'aboute un enregistrement à ma table, tout fonctionne parfaitement. Code let resultat = openPanel.runModal() if resultat == NSApplication.ModalResponse.OK { guard let fileUrl = openPanel.url else { return } var idMax = 0 for sound in sounds { idMax = max(sound.id, idMax) } let displayName: String = fileUrl.deletingPathExtension().lastPathComponent let soundAsset: AVURLAsset = AVURLAsset(url: fileUrl) let endsAt = CMTimeGetSeconds(soundAsset.duration) let sound: Sound = Sound(id: idMax + 1, name: displayName, fileUrl: fileUrl.absoluteString, beginsAt: 0.0, endsAt: endsAt) } sounds.append(sound) soundTableView.reloadData() } Si après avoir ajouté un élément à la table, je clique sur sa ligne, je vois apparaître la longueur du son dans le champ durationField. Par contre, si j'ouvre un fichier précédemment sauvegardé, et alors que le fileUrl apparaît correctement comme attribut, le temps affiché dans durationField est égal à zéro. C'est à dire que dans un document ouvert, le fileUrl de mon soundAsset ne trouve pas le, fichier. Si je rajoute alors le même fichier dans ma table, un clic sur la nouvelle ligne affiche le temps correct, et un clic sur l'ancienne ligne affiche le temps correct aussi. Qu'est-ce que je peux bien avoir fait de mal? L'encodage est fait sur un String, pas directement sur l'Url. Je ne vois pas... -------------------- MacBook Air 13'', 8Go RAM, 256 Go / MacBook Pro, 8Go RAM, 500Go / MacMini Intel (2006), 2Go RAM, 500Go
|
|
|
|
olivion [Swift] NSTableView et NSDocument 8 May 2019, 03:07
schlum Code override func data(ofType typeName: S... 9 May 2019, 00:54
olivion Merci beaucoup pour la réponse. En fait j'ava... 9 May 2019, 14:53
schlum Normal, tu envoies une exception systématiquement... 10 May 2019, 19:40
olivion Il y a des jours comme ça où on se sent très b�... 11 May 2019, 21:10
schlum Je ne vois pas… Essaye avec NSKeyedArchiver / NS... 13 May 2019, 01:53
olivion Merci Schlum de ta réponse. Comme j'ai du mal... 15 May 2019, 02:17
olivion Je précise un peu plus mes recherches sur le suje... 15 May 2019, 12:43
olivion Bon, j'ai eu ma solution. Le problème de lect... 21 May 2019, 11:23
schlum Désolé, pas eu les notifications de réponses…... 25 May 2019, 00:59
olivion Salut Schlum. En fait, c'est pas complètement... 25 May 2019, 03:48
schlum Tu as vu cette technote d’Apple (section « Sec... 27 May 2019, 08:56
olivion Merci, mais oui, j'avais vu. Et mon problème ... 27 May 2019, 12:11![]() ![]() |
| Nous sommes le : 1st May 2026 - 21:33 |