두 개의 뷰 컨트롤러가 있습니다. 한 뷰 컨트롤러는 내 Plist에있는 모든 셀을로드하고 두 번째 뷰 컨트롤러는 셀을 열고 사용자에게 설명을 표시합니다. 보기 컨트롤러 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에서 부울을 변경하는 방법에 대한 자습서를 보았다
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이 쓴과 쓴 것입니다 방법. 코드가 컴파일되지만 bool 값을 변경한다고 생각하지 않습니다. 그래서 내 동물 Plist 난 항목 0 형식 사전, 첫 번째 키는 동물, 유형은 문자열, 값은 "개"이며 두 번째 키는 설명, 유형은 문자열, 값은 "dog goes woof"이고 세 번째 키는 호출됩니다. fav, 타입은 Bool이고 값은 No입니다.하지만이 값을 Yes로 변경하려고 시도하고 있지만 작동하지 않습니다. 또한 따라하기 쉽고 이해하기 쉬운 의견에 너무 감사드립니다.
아마도 이미지보기에서 항상 빈 이미지를로드하도록 말했습니까? 뷰를 정렬하는 방법을 언급하지 않았으므로 뷰 컨트롤러 2가 언로드되고있을 수 있습니다. 다시로드되면 isFavorite를 무시하고 매번 빈 이미지를 사용합니다. – ThatsJustCheesy
그래서 viewcontroller가 매번 언로드되는지 확인하려면 어떻게해야합니까? 왜 그것을 무시하고있는 것은 좋아 하는가? 또 다른 것은 내가 2에서 ViewController 3로 가서 ViewController 2로 돌아갈 때입니다. 별이 아직 채워져 있습니다. 하지만 ViewController 1로 돌아간 다음 다시 2로 돌아 가면 별이 다시 비어 있습니다. – Dkeem
새 코드는 plist에 "fav"키와 값만 쓰고 다른 데이터는 무시합니다. 'saveData'에서 새 사전을 만들고 "fav"NSNumber를 추가 한 다음 작성합니다. 대신, plist의 기존 내용 ("동물"사전을 사용한 것처럼 보입니다)을 사용하고 대신 해당 내용을 수정해야합니다 (예 : 첫 번째 항목에 "fav"키를 추가하십시오. 개). 또한 제안 할 수 있다면'UserDefaults'로 돌아가십시오. 그것은 더 간단합니다. 그리고 이것은 그것이하도록 설계된 일종의 것입니다. – ThatsJustCheesy