我正在編寫一個寫在swift 3.0
中的項目。我的要求是保存在某些文本字段中輸入的數據,並將其中一個屬性填充到表視圖中,一旦選中一行,我想更新該記錄(在我的文本字段上重新賦值)。無法將類型'NSTaggedPointerString'的值轉換爲數組
但是,當我嘗試獲取已保存在core data
中的數據並將它們分配到數組中時,我的代碼出現問題。基本上我有一個名爲「任務」的實體,它有三個屬性,因爲我想填充這些屬性(稱爲「名稱」),我已經保存在覈心數據中的一個表格視圖,我寫了代碼如下。但即時通訊在我的代碼中的以下行中發現異常,說「Could not cast value of type NSTaggedPointerString (0x10d8f7b90) to NSArray (0x10d8f7c58)
」。
錯誤行和代碼如下。
tasks += expName as! [Task]
這裏是我的全碼:
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'不會導致問題。然後,如果可能,請指出引發異常的代碼行。你將有更多的機會獲得幫助! –
主席先生,我清楚地表明我的問題在我的描述下面。 – danutha
'results'是一組任務,'resultGot'是該數組中的一個任務,'expName'是key'name'的一個值。核心數據模型是什麼類型的?字符串我想?那你爲什麼試圖將它轉換爲一系列任務? – alexburtnik