Je suis un nageur rapide et je fais une application météo simple. J'ai utilisé le modèle d'application basée sur les pages.Ajouter une nouvelle page dans PageViewController
Le problème que j'ai est le suivant:
Lorsque l'utilisateur ajoute une ville que j'appelle addCity et ajouter avec succès le nouveau nom de la ville à mon tableau de villes. Lorsque j'imprime ce tableau dans cette fonction, il montre la nouvelle ville à la fin. Cependant, la fonction viewControllerAtIndex qui crée une nouvelle page semble utiliser l'ancienne version de ce tableau, sans ajouter la nouvelle ville. Lorsque j'imprime le tableau des villes, il manque le nouveau nom de la ville. Par conséquent, lorsque les utilisateurs balaye, il n'y aura pas de nouvelle page pour la nouvelle ville rendue. L'utilisateur doit redémarrer l'application pour que la nouvelle ville apparaisse. J'ai créé une vidéo de capture d'écran pour illustrer le problème.
(le tableau des villes devrait aussi montrer « Londres », je pense que je n'ai pas redémarrer l'application)
Je vous serais reconnaissant toute aide ici!
import UIKit
class ModelController: NSObject, UIPageViewControllerDataSource {
var rootViewController = RootViewController()
var cities = [""]
let defaults = UserDefaults.standard
override init() {
super.init()
self.cities = self.defaults.stringArray(forKey: "SavedStringArray") ?? [String]()
if self.cities == [""] || self.cities.count == 0 {
self.cities = ["Current Location"]
}
}
func addCity(name:String) {
self.cities.append(name)
self.defaults.set(self.cities, forKey: "SavedStringArray")
print ("cities from addCity:")
print (self.cities)
}
func viewControllerAtIndex(_ index: Int, storyboard: UIStoryboard) -> DataViewController? {
// Return the data view controller for the given index.
if (self.cities.count == 0) || (index >= self.cities.count) {
return nil
}
// Create a new view controller and pass suitable data.
let dataViewController = storyboard.instantiateViewController(withIdentifier: "DataViewController") as! DataViewController
//get city name
dataViewController.dataObject = self.cities[index]
print ("cities in viewControllerAtIndex:")
print (self.cities)
return dataViewController
}
func indexOfViewController(_ viewController: DataViewController) -> Int {
// Return the index of the given data view controller.
// For simplicity, this implementation uses a static array of model objects and the view controller stores the model object; you can therefore use the model object to identify the index.
return self.cities.index(of: viewController.dataObject) ?? NSNotFound
}
// MARK: - Page View Controller Data Source
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
var index = self.indexOfViewController(viewController as! DataViewController)
if (index == 0) || (index == NSNotFound) {
return nil
}
index -= 1
return self.viewControllerAtIndex(index, storyboard: viewController.storyboard!)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
var index = self.indexOfViewController(viewController as! DataViewController)
if index == NSNotFound {
return nil
}
index += 1
if index == self.cities.count {
return nil
}
return self.viewControllerAtIndex(index, storyboard: viewController.storyboard!)
}
}
Où définissez-vous la '' ModelController' pour le TableViewController'? Pouvez-vous coller ce code aussi? – cweinberger
Hey @cweinberger! Voir tout le code ici: https://github.com/bjoern2000/FranzFahrenheit –