swift 3.0
으로 작성된 프로젝트 작업 중입니다. 내 요구 사항은 일부 텍스트 필드에 입력 한 데이터를 저장하고 해당 속성 중 하나를 테이블 뷰에 채우는 것입니다. 일단 행을 선택하면 해당 레코드를 업데이트하려고합니다 (텍스트 필드에 값을 다시 할당).'NSTaggedPointerString'형식의 값을 배열로 변환 할 수 없습니다.
그러나 내가 core data
에 저장 한 데이터를 가져 와서 배열에 할당하려고하면 내 코드에 문제가 있습니다. 기본적으로 나는 "작업"이라는 엔티티가 있고 세 가지 속성이 있는데, 코어 데이터에 저장된 속성 ("이름") 중 하나를 채우고 싶기 때문에 테이블보기에 코드를 작성했습니다 다음과 같이. 하지만 내 코드에서 다음 줄에 "Could not cast value of type NSTaggedPointerString (0x10d8f7b90) to NSArray (0x10d8f7c58)
"이라는 예외가 발생했습니다.
오류 줄과 코드는 다음과 같습니다.이
import UIKit
import CoreData
class TableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
let appDelegate : AppDelegate = UIApplication.shared.delegate as! AppDelegate
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var tasks = [Task]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewDidAppear(_ animated: Bool) {
//var error : NSError?
let request = NSFetchRequest <NSFetchRequestResult> (entityName: "Task")
request.returnsObjectsAsFaults = false
do {
let results = try context.fetch(request)
// check data existance
if results.count>0 {
print(results.count)
for resultGot in results as! [NSManagedObject]{
if let expName = resultGot.value(forKey:"name"){
print("expence name is :", expName)
tasks += expName as! [Task]
print("my array is : \(tasks)")
}
}
}
}catch{
print("No Data to load")
}
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = tasks [indexPath.row] as? String
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tasks.count
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowEditTask"{
let v = segue.destination as! ViewController
let indexPath = self.tableView.indexPathForSelectedRow
let row = indexPath?.row
}
}
문제와 관련된 코드 만 게시해야합니다. 그렇지 않으면 독자가 문제를 발견하는 데 시간이 걸립니다. 예를 들어'didReceiveMemoryWarning'과'viewDidLoad'는 문제를 일으키지 않습니다. 그런 다음 가능한 경우 예외를 throw하는 코드 줄을 나타냅니다. 도움을 얻을 수있는 기회가 더 많습니다! –
선생님, 제 설명에 문제가있는 부분을 명확히 표시했습니다. – danutha
'results'는 작업의 배열이고,'resultGot'는 그 배열의 작업이고,'expName'은'name' 키의 값입니다. 핵심 데이터 모델의 유형은 무엇입니까? String? 그렇다면 왜 태스크의 배열에 캐스트하려고합니까? – alexburtnik