Aller au contenu


Photo

création et remplissage tableView (code) sans storyBoard


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

#21 Joanna Carter

Joanna Carter

    Broyeur de fèves

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

Posté 07 février 2017 - 12:01

Mappé ? oui bien sur mais je ne souhaite pas une classe "Jeux" (par exemple) statique... je veux du dynamique, tu vois ?

si ma table à des ajout de colonne, car si je fait un ORM je dois lui renseigner a la mano toutes les colonnes...

Voilà ma vision.

 

 

Donc, il te faudra utiliser un dictionnaire de [String : Any] mais, là, tu auras les mêmes soucis de mauvais types.

 

Il faut accepter que tu n'est plus dans le pays de Java ; On parle ici de Swift, qui est un langage dont les types sont strictement appliqués.

 

Si tu veux le dynamisme, il faut chercher ailleurs



#22 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 07 février 2017 - 12:01

Tant que tu n'aurais pas réussi à le faire/comprendre en "statique" comme tu dis, tu auras du mal à le faire en "dynamique".

Et tu auras tout de même un soucis à l'affichage, dans tous les cas.

Tu te rajoutes une dose de complexité, qui te ralentis énormément. Tu as besoin d'abord de maîtriser des concepts.

 

je comprends et j'entends ce que tu me dis.

 

à vouloir faire simple et dynamique, ça devient une usine à gaz :(

 

les concepts de type optional() je commence à m'y faire, et le reste aussi, mais je ne me sent pas si naze que ça, mais ! oui j'ai des lacunes...

 

mon principale soucis, je le redis... c'est la maitrise de ce framework et de géré mes tableaux... niveau objets/méthode etc.

je trouve que je m'en sort pas trop mal non ?

 

 

 

Donc, il te faudra utilise un dictionnaire de [String : Any] mais, là, tu auras les mêmes soucis de mauvais types.

 

Il faut accepter que tu n'est plus dans le pays de Java ; On parle ici de Swift, qui est un langage dont les types sont strictement appliqués.

 

Si tu veux le dynamique, il faut chercher ailleurs

 
 
Oui 100% d'accord avec toi ;)
 
Mais quoi utilisé ? CoreData  ?
Qui m'interdira (si j'ai tout pigé) d'utilisé une base existante, ou pire de faire des backup sur une autre base (miroir) MySQL ? edit: et surtout pas de possibilité de faire des requêtes un peut exotique...
 
Non, ça non... donc je répète, mon soucis est quoi utilisé et m'y tenir, comprendre l'outil ! et m'y tenir si il me convient...
donc, j'ai un soucis de conception...
 
Edit :
je pensais pas dire ça... mais bon...
Sinon, FMDB est parfait je crois ? totale maitrise des requêtes etc.
Mais ! je ne voulais plus utilisé objective-c, je pensais que swift3 était mature et utilisé de façon aussi userFriendly que ces consorts... (niveau SQL) j'aimerais du 100% swift3
 
 
Edit 2:
bon, j'ai trouvé une piste avec GRDB.swift... je vous la post bientôt ;)


#23 Joanna Carter

Joanna Carter

    Broyeur de fèves

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

Posté 07 février 2017 - 13:26

à vouloir faire simple et dynamique, ça devient une usine à gaz :(

 

Avec Swift, tu as la choix - simple ou dynamique  8--)

 

les concepts de type optional() je commence à m'y faire, et le reste aussi, mais je ne me sent pas si naze que ça, mais ! oui j'ai des lacunes...

 

 

Les optionals sont là pour te protéger contre les pièges de nils inattendus. C'est assez facile en concept mais il faut apprendre comment ils se comportent et, si tu te trouves a avec les ! partout, il faut repenser. Les if let et guard let sont là pour t'aider mais il faut arrêter de penser en Java où (presque) tous est permis et penser de la sécurité et fiabilité de ton code.

 

mon principale soucis, je le redis... c'est la maitrise de ce framework et de géré mes tableaux... niveau objets/méthode etc.

je trouve que je m'en sort pas trop mal non ?

 

 

J'ai noté que, souvent tu manques les try catch autour plusieurs APIs de GRDB. Regardes bien le code exemple et lis le code source et tu y trouveras où il faut les utiliser. Encore une fois, c'est pour ta protection.

 

Mais quoi utilisé ? CoreData  ?

Qui m'interdira (si j'ai tout pigé) d'utilisé une base existante, ou pire de faire des backup sur une autre base (miroir) MySQL ? edit: et surtout pas de possibilité de faire des requêtes un peut exotique...

 

 

Oui, tu ne pourrais utiliser une BDD existante dans l'appli mais tu pourrais "importer" les données dans Core Data et après, tu n'aurais plus de besoin. Il y a une appli OS X qui s'appelle Base, qui peut exporter les données d'une BDD SQLite en CSV ou autres formats si tu préfères.
 
Côté requêtes "exotiques", Je ne suis pas encore tombée sur une telle requête, mais, encore une fois, il faut repenser qu'est-ce qu'il veut dire d'avoir une BDD d'objets à la place des tables, rangs et colonnes.
 

je pensais pas dire ça... mais bon...

Sinon, FMDB est parfait je crois ? totale maitrise des requêtes etc.

 

Bah non ! Tu penses de recommencer avec encore un framework ? Tiens à ce que tu as déjà appris et le maitriser ; la plupart de tels frameworks sont écrit de la même manière. C'est plutôt toi qui dois changer, pas les frameworks  :-*

 

Mais ! je ne voulais plus utilisé objective-c, je pensais que swift3 était mature et utilisé de façon aussi userFriendly que ces consorts... (niveau SQL) j'aimerais du 100% swift3

 

 

Ce n'est pas Swift qui n'est pas user friendly, c'est plutôt SQL, surtout dans le monde de programmation d'aujourd'hui avec les objets, classes, structs, type-safety, etc. Les frameworks doivent être compliqués à raison qu'il doivent traduire le monde de SQL vers le monde des objets.

 

--

 

Mais, dis moi : tu parles du dynamisme mais, surement, les tables en SQL ne sont pas dynamiques. Leurs structures sont figées au moment de conception, comme les structs et les classes.

 

Si tu veux vraiment rester avec la BDD SQLite, tu pourrais créer une struct par table ; tu connais le structure de chaque table, il ne reste que les "copier" en structs. Après ça, quand tu récupères les données d'une table, il ne reste qu'à créer une liste d'instances de la struct qui corresponde. Oui, il faudrait créer une méthode pour chaque table mais ce n'est pas difficile a faire.


  • toolsDev aime ceci

#24 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 07 février 2017 - 13:49

merci :)

 

je vais lire et digéré toutes tes infos.

 

Pour le coté difficile ou non de créer une méthode pour chaque table/objet, aucun soucis, mais c'est surtout répétitif... donc pas "objet style" une classe qui créer tout ça de façon dynamique, voilà mon idée.

 

bref, pour te répondre, la structure d'une base de données est bien définit/réfléchi en amont, MAIS ! peut évolué, ça on le vois bien dans le temps, besoin du client etc. Voilà pourquoi je voulais m'amusé à ça, pour comprendre. Et c'est inconcevable d'aller remettre les main dans le code tout le temps... 



#25 Joanna Carter

Joanna Carter

    Broyeur de fèves

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

Posté 07 février 2017 - 14:55

Pour le coté difficile ou non de créer une méthode pour chaque table/objet, aucun soucis, mais c'est surtout répétitif... donc pas "objet style" une classe qui créer tout ça de façon dynamique, voilà mon idée.

 

Si tu regardes dans le source de GRDB, tu y trouveras beaucoup de répétitif ; Ça, c'est la nature des classes/structs adaptatrices.

 

Il y a pas mal de fonctionnalités que tu n'as pas encore touché dans GRDB ; il te faut l'étudier.

 

Là tu as déjà le concept d'un dictionnaire assez sophistiqué dans la classe Row ; la méthode value(named:_) renvoie un objet qui implémente le protocol DatabaseValueConvertible, qui te donne le type de chaque valeur comme un enum, avec lequel tu peux vérifier et convertir la valeur selon tes besoins.

 

Tu pourrais bien créer une struct/classe qui s'occuperait des conversions mais, là dedans, tu devras écrire le code qui fasse les conversions pour chaque table "à la main"

 

bref, pour te répondre, la structure d'une base de données est bien définit/réfléchi en amont, MAIS ! peut évolué, ça on le vois bien dans le temps, besoin du client etc. Voilà pourquoi je voulais m'amusé à ça, pour comprendre. Et c'est inconcevable d'aller remettre les main dans le code tout le temps... 

 

 

Si tu écrivais bien tes structs/classes pour les conversions, modifier le code pour les colonnes additionnelles ne mettra pas beaucoup de temps.

 

Études, études, études  :apl:  8--)


  • toolsDev aime ceci

#26 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 07 février 2017 - 17:34

j'ai enfin réussi, mais je dois à chaque fois préciser quelle colonne je veux afficher(dans le sens ou si je précise pas ce que je souhaite, je pourrais pas itérer !! :( )... bref, voici le dernier code :

            let dataTables = try connexion.inDatabase{db in try Row.fetchAll(db,"SELECT * FROM \(table)")}
            for dataTable in dataTables
            {
                let name:String = dataTable.value(named:"name")
                // en gros si je fais ça : self.arrayData.append(dataTable) pas possible d'itérer...
                self.arrayData.append(name)
            }
class ViewController: UIViewController, UITableViewDataSource
{
    var dataTable:[String] = []
    var tableView = UITableView()

    override func viewDidLoad()
    {
        super.viewDidLoad()

        guard let connexion = ConnexionSQLite.sharedInstance else
        {
            print("Erreur de connexion")
            return
        }
        var posY:Int = 30
        var index = 0
        
        for table in connexion.arrayNomTable
        {
            let button:UIButton = UIButton(frame: CGRect(x:10, y: posY, width:100, height:30))
            button.tag = index
            button.setTitle(table, for: .normal)
            button.addTarget(self, action:#selector(self.pushButton), for: .touchUpInside)
            self.view.addSubview(button)
            posY += 40
            index += 1
        }
    }
    
    func pushButton(_ sender: UIButton)
    {
        guard var connexion = ConnexionSQLite.sharedInstance else
        {
            print("Erreur de connexion")
            return
        }
        connexion.getDataTables(table:sender.currentTitle! as String)
        tableView = UITableView(frame: CGRect(x:130, y: 30, width:200, height:400))
        tableView.backgroundColor =  UIColor(red: 85/255, green: 175/255, blue: 101/255, alpha: 1.0)
        tableView.dataSource = self
        self.view.addSubview(tableView)
        for data in connexion.arrayData
        {
            self.dataTable.append(data)
        }
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
        cell.textLabel?.text = self.dataTable[indexPath.row]
        return cell
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return self.dataTable.count
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
    }
} 

Mais je ne comprends pas ou placer le refresh des données affichés dans la tableView :

self.tableView.reloadData()

j'ai tenté plusieurs essais en vain...

Et j'obtient une concaténation des données dans la tableView...

 

Si vous pouviez juste me dire votre ressenti, je trouve pas ça très jolie/clair/propre

 

En regardant mon code :

        
for data in connexion.arrayData
{
  self.dataTable.append(data)
}

vous constatez que je perds la référence des datas donc je les place dans ma vue dans un autre tableau, j'ai trouvé que cette solution pas très élégante... 

 

Merci ;)



#27 Joanna Carter

Joanna Carter

    Broyeur de fèves

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

Posté 07 février 2017 - 19:05

Ne remplaces pas la UITableView. Tu peux le mettre en place dans le storyboard et la laisser là.

La tableView ne contient aucune donnée, Dans l'action pour le bouton, il ne faut que changer la source des données, comme je t'ai déjà montré.

#28 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 07 février 2017 - 19:21

Je ne comprends pas ce que tu me dis :

Ne remplaces pas la UITableView. Tu peux le mettre en place dans le storyboard et la laisser là.

Elle fonctionne déjà et sans le passer par le storyboard. (ça change quoi ? Via le code je suis maitre de ce que je fais, je peut plus intervenir que via l'interface graphique qui (je trouve, dans mon cas présent) surcharge la vision d'ensemble...

 

La tableView ne contient aucune donnée, Dans l'action pour le bouton, il ne faut que changer la source des données, comme je t'ai déjà montré.

 

Pourtant,  à présent, ma tableView est bien remplis avec les bonnes données, c'est "juste" au niveau du reload que j'ai un soucis (pour la changer les datas à chaque pression d'un nouveau bouton. Et ma data source est pourtant bien affecter comme suis :

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
        // affectation de mes données :
        cell.textLabel?.text = self.dataTable[indexPath.row]
        return cell
    }

Quand tu me dis "ce que je t'ai montré" tu parles des tes 5 méthodes (boutons) et leurs affectation de la data source ?

Parce que, tout est identique à ton idée mais sans la répétition et les plusieurs tableau, moi j'en ai juste un du coup :

class.....

    var dataTable:[String] = []

    func pushButton(_ sender: UIButton)
    {
        guard var connexion = ConnexionSQLite.sharedInstance else
        {
            print("Erreur de connexion")
            return
        }
        connexion.getDataTables(table:sender.currentTitle! as String)
        tableView = UITableView(frame: CGRect(x:110, y: 30, width:300, height:400))
       
        tableView.dataSource = self
        tableView.delegate = self
        
        self.view.addSubview(tableView)

        for data in connexion.arrayData
        {
            self.dataTable.append(data)
        }
        // Donc, si je dis pas de bêtises, ici c'est bien ça place, mais rien ne ce refresh :
        tableView.reloadData()
    } 

Tout ça fonctionne bien dans mon code et ça via une boucle qui construit mes boutons à la volé.(Et comme tu le vois je n'ai aucun soucis avec la récupération de mes senders)

 

Donc, désolé, mais je comprends pas trop ou tu veux en venir ?



#29 Joanna Carter

Joanna Carter

    Broyeur de fèves

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

Posté 07 février 2017 - 20:24

Je ne comprends pas ce que tu me dis :

 

Évidemment.

 

Pourtant,  à présent, ma tableView est bien remplis avec les bonnes données, c'est "juste" au niveau du reload que j'ai un soucis (pour la changer les datas à chaque pression d'un nouveau bouton. Et ma data source est pourtant bien affecter comme suis :

 

 

Mais la méthode est appelé combien de fois ?

 

 

Quand tu me dis "ce que je t'ai montré" tu parles des tes 5 méthodes (boutons) et leurs affectation de la data source ?

 

 

Oui

 

 

Parce que, tout est identique à ton idée mais sans la répétition et les plusieurs tableau, moi j'en ai juste un du coup :

 

 

Est c'est là ton problème.

 

 

class.....

    var dataTable:[String] = []

    func pushButton(_ sender: UIButton)
    {
        guard var connexion = ConnexionSQLite.sharedInstance else
        {
            print("Erreur de connexion")
            return
        }
        connexion.getDataTables(table:sender.currentTitle! as String)
        tableView = UITableView(frame: CGRect(x:110, y: 30, width:300, height:400))
       
        tableView.dataSource = self
        tableView.delegate = self
        
        self.view.addSubview(tableView) **************

 

 

********** Là, tu ajoutes la tableView à sa superView.

 

Chaque fois que tu passes par la boucle, tu crées une UITableView, tu mets self comme dataSource, tu mets self comme delegate, tu l'ajoutes à sa superView qui la garde à jamais et, c'est quand que tu la supprimes de sa superView ? Du coup, après 10 passes par la boucle, tu as 10 tableViews, tous connectées à son dataSource te delegate - c'est fou !

 

C'est pour les raisons comme ci que je t'ai conseillé de ne pas le créer en code. Tu n'as aucun besoin de remplacer (dans ton cas ajouter une deuxième, troisième, etc) ; il ne faut que changer la liste que tu utilises comme dataSource.

 

 

class.....

    var dataTable:[String] = []

    func pushButton(_ sender: UIButton)
    {
       ...

        for data in connexion.arrayData
        {
            self.dataTable.append(data)
        }

 

 

Et, en plus, chaque fois que tu passes par la boucle, tu ajoutes les prochaines données au même liste qu'avant que as appuyé sur le bouton. Du coup, tu une liste qui s'agrandisse chaque fois que l'on appuie sur un bouton.

 

Il ne m'étonne pas que ne vois de change dans la/les tableView(s)

 

 

Tout ça fonctionne bien dans mon code et ça via une boucle qui construit mes boutons à la volé.(Et comme tu le vois je n'ai aucun soucis avec la récupération de mes senders)

 

 

Mais, tout ça ne fonctionne pas bien ; si ça fonctionnait bien, tu n'aurais pas de soucis avec le reloadData()



#30 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 07 février 2017 - 20:42

Évidemment.

Mais encore ??

Mais la méthode est appelé combien de fois ?

Une seule fois, je ne peut pas appuyer sur plusieurs boutons (en tout ça pas là)...

 

Est c'est là ton problème.

en quoi ça serait un soucis,  je vais pas faire 5 méthodes sender car j'ai 5 boutons quand même, la boucle les ajoute dans la même vue, je ne te suis pas du tout là. Elle les ajoute pas dans tableView.. Ça n'à rien à voir pourtant.
 
J'aurais 5 tableView d'empiler je verrais dans le simu les données s'empilerais non ? (Edit: je comprends ce que tu m'as dis, j'avais pas pensée à ça ! mais un coup de remove superview devrait arrangé...)
 
je vais lire tes explications, mais je ne vois pas pourquoi un boucle comme celle ci n'est pas faisable. Sinon, sacré répétition...
 
bref, je vais voir avec
subview.removeFromSuperview()
puisque j'avais oublié sont existence... ça changerais tout


#31 Joanna Carter

Joanna Carter

    Broyeur de fèves

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

Posté 07 février 2017 - 21:08

Chaque fois que appuies sur un bouton, tu fais ce code :

    tableView = UITableView(frame: CGRect(x:110, y: 30, width:300, height:400))
    
    tableView.dataSource = self

    tableView.delegate = self
    
    self.view.addSubview(tableView)

Du coup, tu crées une UITableView, tu connectes son dataSource et son delegate à self (le viewController) et tu l'ajoutes comme subView de ta self.view. Dès ce moment, self.view retient la tableView et, la prochaine fois que tu appelles ce code, tu crées une autre aux même coordonnées, cette tableView couvrira la précédente afin que tu ne la puisses voir, mais elle reste là tout même, demandant les données par son dataSource.

 

Mais, tu as raison en disant qu'il faut appeler reloadData() au fin du code du bouton.



#32 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 07 février 2017 - 21:12

oui, tu as entièrement raison et je comprends mieux ta réponse :)

J'avais pas pensée à ça...

 par contre je comprends le reste de ton post   ;) :

Dis moi, après que tu as ajouté la tableView à 

Du coup, je dois utilisé "tableView.removeFromSuperview()" en tout début de ma méthode sender et la finir par un tableView.reloadData() :

    func pushButton(_ sender: UIButton)
    {
        tableView.removeFromSuperview()
        guard var connexion = ConnexionSQLite.sharedInstance else
        {
            print("Erreur de connexion")
            return
        }
        connexion.getDataTables(table:sender.currentTitle! as String)
        
        tableView = UITableView(frame: CGRect(x:110, y: 30, width:300, height:400))
        tableView.backgroundColor =  UIColor(red: 85/255, green: 175/255, blue: 101/255, alpha: 1.0)

        tableView.dataSource = self
        tableView.delegate = self
        
        self.view.addSubview(tableView)

        for data in connexion.arrayData
        {
            print(data)
            self.dataTable.append(data)
        }
        tableView.reloadData()
    }


#33 Joanna Carter

Joanna Carter

    Broyeur de fèves

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

Posté 07 février 2017 - 21:24

Bah non. Si tu insistes à créer la tableView en code tu devrais déplacer le code de création vers viewDidLoad() pour que tu ne la crées qu'une seule fois.

#34 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 07 février 2017 - 21:40

alors j'ai tout migré dans le viewDidLoad()

Mais je ne vois pas à quel moment remove superView ?

 

Edit:

de toute façon si je passe par le viewDidLoad() plus besoin de removeSuperview.... mais mon soucis de concaténation des datas dans tableView est toujours là, je vois pas trop comment supprimé les veilles données pour afficher les nouvelles en fait, je t'ai lus, mais datasource devrais refresh avec les nouvelles données, je comprends pas.



#35 Joanna Carter

Joanna Carter

    Broyeur de fèves

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

Posté 07 février 2017 - 22:46

mais mon soucis de concaténation des datas dans tableView est toujours là, je vois pas trop comment supprimé les veilles données pour afficher les nouvelles en fait, je t'ai lus, mais datasource devrais refresh avec les nouvelles données, je comprends pas.


func pushButton(_ sender: UIButton)
    {
        guard var connexion = ConnexionSQLite.sharedInstance else
        {
            print("Erreur de connexion")
            return
        }
        
        connexion.getDataTables(table:sender.currentTitle! as String)
        
        self.datatable = [ ]

        for data in connexion.arrayData
        {
            print(data)
            self.dataTable.append(data)
        }
        
        tableView.reloadData()
    }


#36 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 07 février 2017 - 22:57

J'ai bien pensée à faire comme toi, rendre mon tableau vide, mais je trouvais ça "Sale"( je ne me fait vraiment pas assez confiance ... 🙄) , n'y a t il rien de natif pour reset les lignes d'une UItableView ? Un genre de remise à zéro du contenu ?

#37 Joanna Carter

Joanna Carter

    Broyeur de fèves

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

Posté 07 février 2017 - 23:11

Comme j'ai déjà dit, plusieurs fois, la tableView ne "contient" pas de données. En appelant tableView.reloadData(), ça la "vide" et recommence à appeler les méthodes du dataSource pour la remplir comme et quand nécessaire.

N'oublies pas, si tu as 100 articles à montrer dans la tableView, la tableView ne contient jamais plus qu'assez pour remplir les rangs visibles plus deux ou trois pour être prêt quand l'utilisateur scroll. Donc si tu avais 10 rangs visibles, la tableView ne chargerait que 12-14 au même temps.

#38 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 08 février 2017 - 11:02

Comme j'ai déjà dit, plusieurs fois

J'ai juste mon idée/mon point de vu, je ne suis pas têtu dans le mauvais sens ;)

 

J''espère que tu as compris mon point de vue par rapport à mon choix de ne pas utiliser le stroyboard.

Maintenant je vais re faire entièrement mon projet en utilisant storyboard !

 

Du moment que je n'ai pas ma tableView qui s'affiche au lancement de mon application mais bien quand moi je le souhaite (clique d'un bouton) je suis ok :)

 

Comme ça je verrais la différence et rien n'est perdu en développement, j'aurais appris encore beaucoup grace à vous !

 

Question:

Comment vérifié si justement j'ai un empilement d'objet dans ma vue ?

Xcode à un débug poussé et complexe... Mais il m'avait semblé avoir déjà vu une simulation (un outil natif Xcode) ) où l'on voit bien les divers objets en 3D (après est-ce en action ou de façon static je ne sais pas !)

 

 

Edit:

Dans l'outil "debug navigator"

j'ai la mémoire ram de mon application qui "grimpe" à 23Mo mais reste stable, quand je clique sur mes boutons, est ce normal un "tel" niveau de ram pour une si petite application ?



#39 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 950 messages
  • LocationParis

Posté 08 février 2017 - 11:05

Question:

Comment vérifié si justement j'ai un empilement d'objet dans ma vue ?

Xcode à un débug poussé et complexe... Mais il m'avait semblé avoir déjà vu une simulation (un outil natif Xcode) ) où l'on voit bien les divers objets en 3D (après est-ce en action ou de façon static je ne sais pas !)

https://developer.ap..._workflows.html


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#40 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 08 février 2017 - 11:08

Yep ;)

 

merci, je vais voir ça, avant que je reprenne le développement IOS/Xcode cela n'existait pas ... (ou alors je ne connaissait)

 

Du coup cela fonctionne uniquement avec le .... storyboard  :P

 

bon, je vais me mettre à ce storyboard, je sais que c'est plus rapide et sécurisé... pas de soucis :)






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

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