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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

2399閲覧

Swift3のMaster-Detailの中に文字列を入れたいです。

Kochan

総合スコア56

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2016/10/11 08:31

###前提・実現したいこと
swift3、xcode8でMaster-Detail Applicationのテンプレートを使い、
元から入れた文字列を表示するだけのアプリを作ろうとしています。

リストの編集機能をコメントでブロックし、
var objectsに文字列を入れて表示させようとしました。
すると、NSDateを入れるところにStringを入れようとしている、と言われ
対処法がわかりません。

元のテンプレから変更したところにはコメントを入れてあります。

お力お貸しください。

###発生している問題・エラーメッセージ

Cannot assign value of type "String" to type "NSDate"

###該当のソースコード

import UIKit class MasterViewController: UITableViewController { var detailViewController: DetailViewController? = nil //文末の()を削除 var objects = ["king","Queen"] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //コメントで機能を追加するブロック /* self.navigationItem.leftBarButtonItem = self.editButtonItem let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(insertNewObject(_:))) self.navigationItem.rightBarButtonItem = addButton if let split = self.splitViewController { let controllers = split.viewControllers self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController } */ } override func viewWillAppear(_ animated: Bool) { self.clearsSelectionOnViewWillAppear = self.splitViewController!.isCollapsed super.viewWillAppear(animated) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //コメントで機能をブロック /* func insertNewObject(_ sender: Any) { objects.insert(NSDate(), at: 0) let indexPath = IndexPath(row: 0, section: 0) self.tableView.insertRows(at: [indexPath], with: .automatic) } */ // MARK: - Segues override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showDetail" { if let indexPath = self.tableView.indexPathForSelectedRow { //文末の as! NSDate を削除 //この下の部分で上記のエラーメッセージが出ています。 let object = objects[indexPath.row] let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController controller.detailItem = object controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem controller.navigationItem.leftItemsSupplementBackButton = true } } } // MARK: - Table View override func numberOfSections(in tableView: UITableView) -> Int { return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return objects.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) //文末の as! NSDate を削除 let object = objects[indexPath.row] //文末の .description を削除 cell.textLabel!.text = object return cell }

###試したこと
let object = objects[indexPath.row] as! String

とし、objectをStringとして宣言しようとしたのですが、
元からStringのものをString宣言しても意味はない、とエラーメッセージが出ました。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

DetailViewController.swiftのdetailItemの型を変更しないとダメですね。

swift

1 var detailItem: String? { 2 didSet { 3 // Update the view. 4 self.configureView() 5 } 6 } 7

投稿2016/10/11 08:50

fromageblanc

総合スコア2724

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

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

Kochan

2016/10/11 09:03

ありがとうございます!! 書き換えたところ、ビルドまでうまくいき文字がリストで表示されました!! ですが クリックして詳細画面に行こうとしたところ、 if segue.identifier == "showDetail" のところでbreak pointができてしまい、 アプリが止まってしまいました。 こちらに関して何かわかりますでしょうか。 お手数おかけします。
Kochan

2016/10/11 09:06

DetailViewController.swiftの中身です。 import UIKit class DetailViewController: UIViewController { @IBOutlet weak var detailDescriptionLabel: UILabel! func configureView() { // Update the user interface for the detail item. if let detail = self.detailItem { if let label = self.detailDescriptionLabel { label.text = detail.description } } } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.configureView() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //NSDate から Stringに直した。 データの型として文字列を入れるため var detailItem: String? { didSet { // Update the view. self.configureView() } } }
fromageblanc

2016/10/11 09:07

青い付箋みたいなやつですか?摘んで右にドラッグすれば消えます。
Kochan

2016/10/11 09:19

すみません! クリーンアップしてビルドしなおしたところ、うまくいきました! 次に出てきたときは掴んで右にドラッグを試してみます!
fromageblanc

2016/10/11 09:22

ちなみに左でもダイジョブです。
Kochan

2016/10/11 09:29

了解しましたw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問