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

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

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

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

Q&A

解決済

1回答

2588閲覧

Cannot convert value of type '〇〇.Type' expected argument type 'Object.Type'エラーとは何ですか?

iOS25535009

総合スコア12

Swift

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

0グッド

0クリップ

投稿2019/08/11 17:29

前提・実現したいこと

Swiftでタスク管理アプリを作っています。下記のエラーが発生していますが、なぜでしょうか?

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

Cannot convert value of type 'Category.Type' (aka 'OpaquePointer.Type') to expected argument type 'Object.Type'
Cannot invoke initializer for type 'Category' with no arguments

該当のソースコード

https://gyazo.com/b3efdda5e2221fccbe81141e1ac1e18b

swift

1import UIKit 2import RealmSwift 3import UserNotifications 4 5class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource,UISearchBarDelegate,UIPickerViewDelegate, UIPickerViewDataSource { 6 7 8 @IBOutlet weak var searchBarField: UISearchBar! 9 @IBOutlet weak var tableView: UITableView! 10 11 @IBOutlet weak var searchPickerView: UIPickerView! 12 13 // Realmインスタンスを取得する 14 let realm = try! Realm() 15 //print(path) 16 // DB内のタスクが格納されるリスト。 17 // 日付近い順\順でソート:降順 18 // 以降内容をアップデートするとリスト内は自動的に更新される。 19 var taskArray = try! Realm().objects(Task.self).sorted(byKeyPath: "date", ascending: false) 20 21 var dataList = try! Realm().objects(Category.self) 22 var drumRollRow:Int! 23 24 override func viewDidLoad() { 25 super.viewDidLoad() 26 dump(taskArray) 27 print("fff") 28 searchBarField?.delegate = self 29 // Do any additional setup after loading the view, typically from a nib. 30 tableView.delegate = self 31 tableView.dataSource = self 32 searchPickerView.delegate = self 33 searchPickerView.dataSource = self 34 self.tableView.reloadData() 35 let category = Category() 36 let allCategory = realm.objects(Category.self) 37 if allCategory.count == 0 { 38 39 //category.id = 1 40 category.category_title = "全て" 41 try! realm.write { 42 self.realm.add(category, update: true) 43 } 44 //realm.add(category, update: true) 45 } 46 self.searchPickerView.reloadAllComponents() 47 48 } 49 func numberOfComponents(in pickerView: UIPickerView) -> Int { 50 return 1 51 } 52 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 53 drumRollRow = row 54 if(row != 0) { 55 taskArray = try! Realm().objects(Task.self).filter("category.id = (row)") 56 } else { 57 taskArray = try! Realm().objects(Task.self) 58 } 59 60 self.tableView.reloadData() 61 62 } 63 func pickerView(_ pickerView: UIPickerView, 64 numberOfRowsInComponent component: Int) -> Int { 65 return dataList.count 66 } 67 func pickerView(_ pickerView: UIPickerView, 68 titleForRow row: Int, 69 forComponent component: Int) -> String? { 70 71 return dataList[row].category_title 72 } 73 74 // MARK: UITableViewDataSourceプロトコルのメソッド 75 // データの数(=セルの数)を返すメソッド 76 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 77 78 //self.tableView.reloadData() 79 return taskArray.count 80 } 81 82 // 各セルの内容を返すメソッド 83 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 84 85 // 再利用可能な cell を得る 86 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 87 88 // Cellに値を設定する. 89 let task = taskArray[indexPath.row] 90 //dump(indexPath.row) 91 cell.textLabel?.text = task.title 92 93 let formatter = DateFormatter() 94 formatter.dateFormat = "yyyy-MM-dd HH:mm" 95 96 let dateString:String = formatter.string(from: task.date) 97 cell.detailTextLabel?.text = dateString 98 99 100 return cell 101 } 102 103 func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { 104 105 taskArray = try! Realm().objects(Task.self).sorted(byKeyPath: "date", ascending: false) 106 self.tableView.reloadData() 107 } 108 109 // MARK: UITableViewDelegateプロトコルのメソッド 110 // 各セルを選択した時に実行されるメソッド 111 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 112 performSegue(withIdentifier: "cellSegue",sender: nil) 113 } 114 115 // セルが削除が可能なことを伝えるメソッド 116 func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath)-> UITableViewCell.EditingStyle { 117 return .delete 118 } 119 120 // Delete ボタンが押された時に呼ばれるメソッド 121 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 122 123 if editingStyle == .delete { 124 // 削除するタスクを取得する 125 let task = self.taskArray[indexPath.row] 126 127 // ローカル通知をキャンセルする 128 let center = UNUserNotificationCenter.current() 129 center.removePendingNotificationRequests(withIdentifiers: [String(task.id)]) 130 131 // データベースから削除する 132 try! realm.write { 133 self.realm.delete(task) 134 tableView.deleteRows(at: [indexPath], with: .fade) 135 } 136 137 // 未通知のローカル通知一覧をログ出力 138 center.getPendingNotificationRequests { (requests: [UNNotificationRequest]) in 139 for request in requests { 140 //print("/---------------") 141 print(request) 142 //print("---------------/") 143 } 144 } 145 } 146 } 147 148 149 150 // segue で画面遷移するに呼ばれる 151 override func prepare(for segue: UIStoryboardSegue, sender: Any?){ 152 let inputViewController:InputViewController = segue.destination as! InputViewController 153 154 if segue.identifier == "cellSegue" { 155 let indexPath = self.tableView.indexPathForSelectedRow 156 inputViewController.task = taskArray[indexPath!.row] 157 inputViewController.touchrow = 1 158 } else { 159 // 新規 160 let task = Task() 161 task.date = Date() 162 let allTasks = realm.objects(Task.self) 163 if allTasks.count != 0 { 164 task.id = allTasks.max(ofProperty: "id")! + 1 165 } 166 167 inputViewController.task = task 168 inputViewController.touchrow = 2 169 } 170 } 171 172 // 入力画面から戻ってきた時に TableView を更新させる 173 override func viewWillAppear(_ animated: Bool) { 174 super.viewWillAppear(animated) 175 tableView.reloadData() 176 searchPickerView.reloadAllComponents() 177 } 178 179 180} 181

この「Category」の部分でエラーが発生している

var dataList = try! Realm().objects(Category.self) var drumRollRow:Int! override func viewDidLoad() { super.viewDidLoad() dump(taskArray) print("fff") searchBarField?.delegate = self // Do any additional setup after loading the view, typically from a nib. tableView.delegate = self tableView.dataSource = self searchPickerView.delegate = self searchPickerView.dataSource = self self.tableView.reloadData() let category = Category() let allCategory = realm.objects(Category.self) if allCategory.count == 0 {

試したこと

google翻訳で「タイプ「Category.Type」(別名「OpaquePointer.Type」)の値を期待される引数タイプ「Object.Type」に変換できません」「引数なしで 'Category'型の初期化子を呼び出すことはできません」とありましたが、意味がわかりません。検索をかけてもこれに該当するものはありませんでした。

補足情報(FW/ツールのバージョンなど)

Xcode 10.3
Swift 5.0.1

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

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

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

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

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

fathy

2019/08/12 01:05

Categoryクラスの定義を追記してください。
iOS25535009

2019/08/12 07:50

ありがとうございました
guest

回答1

0

自己解決

Raelmのモデルクラス(左のフォルダを右クリック→New File...でCategory.swift)を作り、

import RealmSwift class Category: Object { }

でクラス定義したら、消えました。
(Realmのモデルクラスとして定義するCategoty型がObject型を継承する形で定義)

投稿2019/08/12 07:48

iOS25535009

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問