質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

2664閲覧

Could not cast value of type 'NSTaggedPointerString' to 'NSArray' .

hahum

総合スコア65

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/01/10 17:18

編集2019/01/11 01:02

ボタンを押したらTableViewに記録が残るアプリをしているのですが、Saveボタンを押すとSigabrtエラーが出てしまします、不必要なキャッシュは切ってあるので、紐付けが原因ではないはずなのですが原因がわからなく困っております。アドバイスいただけたら幸いです。

Swift

1 var resultArray1 = [String]() 2 3 var dateArray1 = [String]() 4 5 var Array1: [[String]] = [] 6 7 var date1 = Date() 8 9... 10... 11... 12 13 14 15 @IBAction func save(_ sender: Any) { 16 17 //配列を取り出す 18 if (UserDefaults.standard.object(forKey: "save") != nil) { 19 Array1 = UserDefaults.standard.object(forKey: "save") as! [[String]] __**Thread 1: signal SIGABRT**__ 20 21 } 22 23 //zikanを呼び出す 24 zikan() 25 //resultArrayに回数を追加 26 resultArray1.append(countLabel2.text!) 27 28 Array1 = [resultArray1, dateArray1] 29 30 //Array1の要素0(resultArray1の保存したもの)をresultArray1に入れる 31 self.resultArray1 = self.Array1[0] 32 // Array1の要素1(dateArray1の保存したもの)をdateArray1に入れる 33 self.dateArray1 = self.Array1[1] 34 35 UserDefaults.standard.set(Array1, forKey: "save") 36 37 print("Array1:", Array1.description) 38 print(resultArray1.description) 39 print(dateArray1.description) 40 } 41 42 43 func zikan() { 44 //日付のフォーマットを指定する 45 let format = DateFormatter() 46 format.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMdkHm", options: 0, locale: Locale(identifier: "ja_JP")) 47 48 //日付をStringに変換する 49 let sDate = format.string(from: date1) 50 //日付をdateArrayに入れる 51 dateArray1.append(sDate) 52 } 53

追記 1/11

新しいエラーが次の画面であるTableViewに出ています。(Sigabrt)
前回同様部品の紐付けは確認いたしました。エラーメッセージは前回同様Could not cast value of type 'NSTaggedPointerString' to 'NSArray' .です。

SaveViewContoroller.swift

swift

1var resultArray2 = [String]() 2 3 var dateArray2 = [String]() 4 5 var Array2: [[String]] = [] 6 ... 7... 8... 9 10 11override func viewDidLoad() { 12 super.viewDidLoad() 13 14 15 tableView.delegate = self 16 tableView.dataSource = self 17 18 if UserDefaults.standard.object(forKey: "save") != nil { 19 20 Array2 = [UserDefaults.standard.object(forKey: "save") as! [String]] 21 } 22 23 Array2 = [resultArray2, dateArray2] 24 25 26 self.resultArray2 = self.Array2[0] 27 self.dateArray2 = self.Array2[1] 28 29 30 31 32 //Array2 = [ ["晴れ", "雨", "雪"], 33 //["2019/1/1", "2019/1/2", "2019/1/3"] ] 34 35 print("Array2:", Array2.description) 36 print(resultArray2.description) 37 print(dateArray2.description) 38 39 } 40 41 42 override func viewWillAppear(_ animated: Bool) { 43 super.viewDidAppear(animated) 44 45 tableView.reloadData() 46 } 47 48 49 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 50 51 return resultArray2.count 52 53 } 54 55 func numberOfSections(in tableView: UITableView) -> Int { 56 return 1 57 } 58 59 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 60 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 61 62 63 print("Array2:at cellForRowAt", Array2.description) 64 print(Array2.count) 65 print(resultArray2.description) 66 print(dateArray2.description) 67 68 cell.textLabel!.text = resultArray2[indexPath.row] 69 cell.detailTextLabel!.text = dateArray2[indexPath.row] 70 71 return cell 72 } 73 74 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 75 return 40 76 } 77 78 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 79 80 if editingStyle == .delete { 81 Array2.remove(at: indexPath.row) 82 83 UserDefaults.standard.set(Array2, forKey: "save") 84 85 tableView.reloadData() 86 } 87 } 88

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2019/01/11 00:10

「不必要なキャッシュ」というのは何でしょうか?
fuzzball

2019/01/11 00:14 編集

一度アプリを削除してインストールし直してみて下さい。エラーは変わりませんか?
fuzzball

2019/01/11 00:25

Consoleにエラーが表示されていませんか?
hahum

2019/01/11 00:25

黄色のエラーです。ボタンが繋がってないときに出るやつです。 アプリを削除とはどうやりますか? ずべてデータが消えるわけではないですか。
fuzzball

2019/01/11 00:28

普段スマホ使ってないですか?アプリ削除したことないですか?
hahum

2019/01/11 00:32 編集

動くようになりました!ありがとうございます。
guest

回答2

0

ベストアンサー

よく見ると構文間違えてませんか。

Array2 = [UserDefaults.standard.object(forKey: "save") as! [String]]

Array2 = UserDefaults.standard.object(forKey: "save") as! [[String]]

投稿2019/01/11 01:02

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

タイトルの通りですとしか言えませんが。。。

NSTaggedPointerString' から 'NSArray へキャストできません

です。

エラーが出ているところの型が右辺と左辺で合わないですと言われてます。

投稿2019/01/10 22:57

hameji001

総合スコア639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hahum

2019/01/11 00:47

どのようにすれば良いか教えていただけないでしょうか、自分で調べて解決しろと思うかもしれませんが初めてのアプリ作りで本当に困っております。本やネットで調べてもその説明がわからなく、何日も考えてます。アドバイス頂けたら幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問