![]() |
Bienvenue invité ( Connexion | Inscription )
![]() |
![]()
Message
#1
|
|
![]() Adepte de Macbidouille ![]() Groupe : Membres 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
|
|
|
![]() |
![]()
Message
#2
|
|
![]() Adepte de Macbidouille ![]() Groupe : Membres 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
|
|
|
![]() ![]() |
Nous sommes le : 18th July 2025 - 11:10 |