2017-11-10 3 views
1

을 닫을 때마다 나는내가 응용 프로그램을 완전히 (스위프트)

class myArrayDataStructure { 
    static var myArray = Array<String>() // the singleton array 
    private init() {} // prevents unwanted access 
} 

내가 문자열을 입력하고 버튼 등을 사용하여 저장하는 사용자에게있는 UIViewController의 클래스가 다음과 같습니다 :

@IBAction func EnterAction(_ sender: Any) { 
    if let sContent = TextF.text { 
     // append it to the global singleton array 
     myArrayDataStructure.myArray.append(sContent) 
     UserDefaults.standard.set(myArrayDataStructure.myArray, forKey: "items")} 

또 다른 viewController에서 배열을 당기고 tableView에 표시합니다. 내 식별자 셀은 "셀"이라고 :

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
     return myArrayDataStructure.myArray.count 
    } 

    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") 
     let returnedItems = UserDefaults.standard.stringArray(forKey: "items") ?? [String]() 
     let tempLabel = returnedItems[indexPath.row] 
     cell.textLabel?.text = tempLabel + " Good Job" 
     return cell 

코드는 완벽하게 작동하고 내가 응용 프로그램을 저장하고 테이블에 표시 항목,하지만 홈 버튼을 두 번 클릭하고 경우 다시 열 수 있어요, 테이블 비었다. 앱을 완전히 닫은 후에도 저장된 항목을 테이블에 보관하는 방법은 무엇입니까?

override func viewDidAppear(_ animated: Bool) { 
     let returnedItems = UserDefaults.standard.stringArray(forKey: "items") ?? [String]() 
     for item in returnedItems{ 
      totalAmount.text = item + " Miles" // totalAmount is a label under the table 
     } 

     print(returnedItems) 
     table.reloadData() 
    } 
+0

'numberOfRowsInSection' 메소드를 보여주세요. – rmaddy

+0

게시 한 코드에서 배열을 UserDefaults에만 설정하고 읽지는 않습니다. – andreamazz

+0

이제'UserDefaults'에서'myArrayDataStructure.myArray'를 초기화하는 방법을 보여줍니다. – rmaddy

답변

1

기본 문제는 앱을 새로 고침 할 때 myArrayDataStructure.myArray을 채우지 않는 것입니다.

또한 글로벌 배열을 제대로 활용하지 못하고 있습니다. cellForRowAt 메소드에서 사용하고 있지 않습니다. viewDidAppear 방법에서 사용하고 있지 않습니다.

numberOfRowsInSectionEnterAction 방법에 사용하십시오.

시작을 글로벌 배열에 UserDefaults를로드하여 :

class myArrayDataStructure { 
    static var myArray = UserDefaults.standard.stringArray(forKey: "items") ?? [String]() 
    private init() {} // prevents unwanted access 
} 

그리고 지속적으로 전역 배열을 사용하도록 뷰 컨트롤러를 업데이트하면 다음과 같이 코드를 업데이트해야 최소한

:

귀하의 cellForRowAt :

let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") 
let tempLabel = myArrayDataStructure.myArray[indexPath.row] 
cell.textLabel?.text = tempLabel + " Good Job" 
return cell 
,691 귀하의 viewDidAppear

: viewDidAppear의 루프는 배열의 마지막 값을 보여줍니다

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 

    for item in myArrayDataStructure.myArray { 
     totalAmount.text = item + " Miles" 
    } 

    table.reloadData() 
} 

참고. 그것은 무의미하다.

+0

그것은 효과가 있었다. 그것은 매우 높이 평가됩니다 !! – codeDojo