これで2つのView Controllerがあります。 1つのView ControllerがPlist上にあるすべてのセルをロードし、2番目のView Controllerがセルを開き、その説明を表示します。たとえば: ビューコントローラ1: 犬猫 マウスViewController 1に戻ってからviewcontroller 2に戻るときにUserDefaultが保存されない
クリックして犬のセルには、それがコントローラ2を表示するために行くことができます: 犬ウーフを行きます。
ビューコントローラ1が書かれている:
ovverride func prepare(for segue: UIStoryBoardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
let animals: Animals
if isFiltering() {
animals = filteredData[indexPath.row]
}
else {
animals = originalData[indexPath.row]
}
let controller = (segue.destination as! UINavigationController).topViewController as! SecondViewController
controller.detailedAnimals = animals
controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
contrller.navigationItem.leftItemsSupplementBackButton = true
}
}
}
これは私がPLISTでBOOLを変更する方法についてのチュートリアルを見
var isFavorite : Bool = false
@IBAction func addToFav(_ sender:UIButton) {
isFavorite = !isFavorite
UpdateButtonAppearance()
saveData()
}
private func UpdateButtonAppearance(){
if isFavorite{
let image = UIImage(named: "addFav")
favButton.setImage(image, for: . normal)
savedData()
}
else {
let image = UIImage(named: "addFavFilled")
favButton.setImage(image, for: . normal)
savedData()
}
}
ovveride func viewDidLoad(){
UpdateButtonAppearance()
saveData()
}
//updated code
func getFilePath() -> String {
var path: [AnyObject] = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) as [AnyObject]
let documentsDirectory: String = path[0] as! String
let filepath = documentsDirectory.appending("Animals.plist")
return filepath
}
func saveData(){
let myDict : NSMutableDictionary = NSMutableDictionary()
myDict["fav"] = NSNumber(booleanLiteral: isFavorite)
myDict.write(toFile: self.getFilePath(), atomically: true)
}
func getBool(){
if FileManager.default.fileExists(atPath: self.getFilePath()) {
var myDict = NSDictionary(contentsOfFile: self.getFilePath()) as!
[String:AnyObject]
let myBool: Bool = myDict["fav"]!.boolValue
isFavorite = myBool
}
更新のViewController 2に書いて、それにこれを書いたものです方法。コードはコンパイルされますが、私はそれがbool値を変更しているとは思いません。だから私の動物Plist私は項目0型の辞書を持っています、最初のキーは動物と呼ばれ、タイプは文字列であり、値は "犬"で2番目のキーは説明です、タイプは文字列で、値は "dog goes woof" favは、タイプはBoolで、値はNoですが、この値をYesに変更しようとしていますが、動作していません。また、あなたのコメントにとても感謝しています。
画像ビューに空の画像を常に読み込むように指示したのでしょうか?あなたはあなたのビューがどのように配置されているかは述べていないので、View Controller 2がアンロードされている可能性があります。それが再び読み込まれるとき、 'isFavorite'を無視して毎回空のイメージを使うかもしれません。 – ThatsJustCheesy
したがって、viewcontrollerが毎回アンロードされているかどうかを確認するにはどうすればよいですか?なぜそれが嫌いなのですか?別のものは、2からViewController 3に行き、ViewController 2に戻るときです。しかし、ViewController 1に戻って2に戻ると、星は再び空になります。 – Dkeem
新しいコードでは、 "fav"キーと値だけをplistに書き込んで、他のデータは破棄します。 'saveData'では、新しい辞書を作成し、" fav "NSNumberを追加して書き出します。代わりに、plistの既存のコンテンツ( "動物"辞書の配列を使用しているようです)を使用して、それらを変更します(最初のアイテムに「fav」キーを追加します犬)。また、私が提案するかもしれない場合は、 'UserDefaults'に戻ります。それはより簡単で、これはそれが行うように設計されたものです。 – ThatsJustCheesy