Aller au contenu


Photo

[SWIFT3] - Mise à jour Interface <-> Base de données


  • Please log in to reply
13 réponses à ce sujet

#1 regatta

regatta

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 67 messages
  • LocationOrléans

Posté 19 août 2017 - 13:27

Bonjour à tous,

 

J'utilise un programme de gestion d'une collection que j'ai développé en Objective C sur Mac.

J'utilise le Framework FMDB pour gérer la base.

 

Pour me former à Swift et aux Storyboard, je tente de réécrire mon logiciel en Swift.

J'ai passé du temps sur les Storyboards et cela commence à prendre forme.

 

Je galère sur la communication entre l'interface et la base de données : j'utilisais les bindings et la gestion des notifications pour mettre à jour les tables de la base de donnée à partir d'une méthode unique d'update.

 

Je cherche un moyen simple de faire ce type de mise à jour bi-directionnel, en Swift, sans devoir écrire plein de code.

 

Hélas, je ne trouve pas comment réaliser simplement ces fonctionnalités (pourtant basique avec une base de donnée), en Swift !

 

J'ai regardé le Framework Bound, le KVO en Swift, mais je ne trouve pas comment réaliser cette communication entre l'interface et la base de donnée.

 

Si vous avez une solution simple et des exemples, merci d'avance pour vos pistes :bravo!: .

 

Eric 



#2 regatta

regatta

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 67 messages
  • LocationOrléans

Posté 19 août 2017 - 13:32

Oups !

 

Le nom du Framework regardé est "ReactiveKit/Bond" et non pas "Bound" !



#3 Céroce

Céroce

    Mouleur de chocolats

  • Contrôleur d'arômes
  • 5 324 messages
  • LocationSaint-Leu-d'Esserent / France

Posté 22 août 2017 - 13:46

La framework ReactiveKit sert à faire de la programmation réactive en Swift. Elle a deux autres concurrents bien plus populaires: Reactive Cocoa et surtout RxSwift.

 

Mon avis est que la programmation réactive est complexe, voire compliquée. Basculer vers cet univers est intéressant et enrichissant mais pas anodin. Cela exige une bonne expérience de Swift et de la programmation fonctionnelle. Et rien n'est magique: il faut connaître beaucoup de concepts et écrire encore beaucoup de code pour interfacer les différents composants.

 

Si tu veux juste porter ton ancien programme qui utilisait les KVO, alors tu peux toujours avec Swift de base. Tant que les objets Swift héritent de NSObject, le KVO fonctionne.


RenaudPradenc.com Je suis développeur iOS & Mac indépendant.

#4 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 997 messages
  • LocationPlestin-les-Grèves (22)

Posté 22 août 2017 - 16:40

Je ne sais pas s'il t'intéresse ou non, mais j'ai écrit une série d'articles sur quelque chose qui ressemble les bindings de MacOS :



#5 regatta

regatta

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 67 messages
  • LocationOrléans

Posté 22 août 2017 - 18:47

Merci pour vos réponses.

 

Je suis effectivement en train de regarder KVO, mais les discussions sur le sujet ne me semblait pas toujours très claires sur les autres forums.

 

Je suis tombé sur ce fil ( point 41) https://stackoverflo...-swift/24627141

 

Mon besoin est juste de rendre en compte les actions sur les objets de l'écran (NSTextField par exemple) pour mettre à jour ma base.

Pour l'instant, cela ne marche pas chez moi (mon anglais est plutôt limité !) .

 

Je trouve que les exemples donnés sont souvent trop compliqués pour expliquer des choses très simples. :crazy:



#6 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 997 messages
  • LocationPlestin-les-Grèves (22)

Posté 23 août 2017 - 11:38

Je viens d'essayer avec un petit projet en Swift et je n'avais aucun problème en utilisant les bindings. La seule condition, c'est que tous les types et propriétés soient compatibles avec Objective-C : NSObject, NSCopying, etc.

Les types Swift comme Array, String, etc se convertissent automatiquement.

 

e.g.

 

Fichier joint  Objet.png   29,13 Ko   0 téléchargement(s)

 

Fichier joint  Binding.png   31,29 Ko   0 téléchargement(s)

public class Test : NSObject
{
  dynamic var name: String?
  {
    didSet
    {
      print(name ?? "nil")
    }
  }
}


class ViewController: NSViewController
{
  @IBOutlet var test: Test!
  
  @IBAction func btnPress(_ sender: NSButton)
  {
    test.name = "Joanna"
  }
}


#7 regatta

regatta

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 67 messages
  • LocationOrléans

Posté 23 août 2017 - 16:14

Merci pour cet exemple simple, comme j'aime bien  :-*

Je regarderai ça ce week-end



#8 Jérémy

Jérémy

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 413 messages
  • LocationBordeaux

Posté 23 août 2017 - 16:19

public class Test : NSObject
{
  dynamic var name: String?
  {
    didSet
    {
      print(name ?? "nil")
    }
  }
}

 

Le keywork "dynamic" apporte quoi dans ton cas ?


Twitter : @jrmguimberteau


#9 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 997 messages
  • LocationPlestin-les-Grèves (22)

Posté 23 août 2017 - 17:31

Le keywork "dynamic" apporte quoi dans ton cas ?

 

 

C'est nécessaire en Swift pour que les vars appellent le mécanisme de KVO. Sinon, on n'est pas notifié des changements des vars.



#10 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 997 messages
  • LocationPlestin-les-Grèves (22)

Posté 23 août 2017 - 17:33

Merci pour cet exemple simple, comme j'aime bien  :-*

Je regarderai ça ce week-end

 

J'ai fait, en plus, un exemple pour connecter un Array par moyen d'un NSArrayController à un NSTableView si tu avais les difficultés.



#11 regatta

regatta

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 67 messages
  • LocationOrléans

Posté 23 août 2017 - 19:48

Je veux bien un exemple de plus : c'est toujours bon de regarder le code des autres

:bravo!:



#12 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 997 messages
  • LocationPlestin-les-Grèves (22)

Posté 23 août 2017 - 20:12

Je veux bien un exemple de plus : c'est toujours bon de regarder le code des autres
:bravo!:

Bien mais, là tu seras déçu. Aucune ligne de code, c'est tout dans les bindings en IB :)

#13 Jérémy

Jérémy

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 413 messages
  • LocationBordeaux

Posté 24 août 2017 - 01:59

C'est nécessaire en Swift pour que les vars appellent le mécanisme de KVO. Sinon, on n'est pas notifié des changements des vars.

 

Ah ok d'ac, merci  !  :bravo!:


Twitter : @jrmguimberteau


#14 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 997 messages
  • LocationPlestin-les-Grèves (22)

Posté 24 août 2017 - 09:07

Exemple pour array :

 

Fichier joint  ArrayController.png   38,42 Ko   0 téléchargement(s)

 

Fichier joint  TableView.png   69,13 Ko   0 téléchargement(s)

 

Fichier joint  TableViewCell.png   42,42 Ko   0 téléchargement(s)

class ViewController: NSViewController
{
  var test = Test()
  
  var testList = [Test("Swift"), Test("Objective-C"), Test("C#"), Test("Delphi")]
  
  @IBAction func btnPress(_ sender: NSButton)
  {
    test.name = "Joanna"
  }
}





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)