2016-03-21 8 views
1

をプログラミングするのが初めてで、iOSアプリケーション でデータを管理しようとして問題が発生しました。 分離するために、MVCモデル明確に私は GenericでSwiftでレルムを使用

import RealmSwift 

class TaskData: Object { 

    dynamic var id = 0  
    dynamic var title = "" 
    dynamic var category: Category? 
    // category.id:Int, category.name:String, category.priority:Int 
    dynamic var contents = "" 
    dynamic var date = NSDate() 

    /* set id as primary */ 
    override static func primaryKey() -> String { 
     return "id" 
    } 

} 

TaskData.swift

ModelLocator.swift

import UIKit 
import RealmSwift 

class ModelLocator : NSObject { 

    class var sharedInstance : ModelLocator { 
     struct Singleton { 
      static var instance = ModelLocator() 
     } 
     return Singleton.instance 
    } 

    var tasks = TaskModel<Object>() 

    override init() { 
     print("ModelLocator init!") 
    } 

    func getTask() -> TaskModel<Object> { 
     return tasks 
    } 

    func setTask(array:TaskModel<Object>) -> TaskModel<Object> { 
     tasks = array 
     return tasks 
    } 

} 

以下

として

import UIKit 
import RealmSwift 

let realm = try! Realm() 

class TaskModel <T: Object>: NSObject { 

    var resources : Results<T>! 

    func getResources() -> Results<T> { 
     return resources 
    } 

    func fetchData(database: T) { 
     self.resources = try! Realm().objects(database.dynamicType).sorted("date", ascending: false) 
    } 

    func saveTaskData(number : Int, item : T){ 
     let taskData:TaskData = TaskData() 
     try! realm.write { 
      switch number { 
      case 0: 
       taskData.id = item as! Int 
       break 
      case 1: 
       taskData.title = item as! String 
       break 
      default: 
       break 
      } 
     } 
    } 

} 

をModelData.swift

3迅速なクラスを作って、それを呼ばれますViewController.swiftで

のViewController

ビルドで
import UIKit 
import RealmSwift 

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet weak var tbView: UITableView! 

    var taskModel: TaskModel<Object> = TaskModel() 
    var taskArray: Results<TaskData>? 
    var category: Category = Category() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let modelLocator = ModelLocator() 
     taskModel = modelLocator.getTask() 
     let database = "TaskData" 
     taskArray = taskModel.fetchData(TaskData) // <- Where there is error in line 
     print(taskArray) 

は、ラインは、上記の予想に '(TaskData).TYPE'(別名 'TaskData.Type')

は「型の値を変換することができないというエラーが表示さ引数型 'Object' "

左右の型は一致しませんが、正しい方法はわかりません。 (意味は別名私には馴染みがないし、グーグルが私にも役に立たなかった)

このコードをどのように修正すればよいか教えてもらえますか?

答えて

2

TaskModel.fetchDataは、タイプTとしてクラスをパラメータ化したため、その場合はObjectタイプの引数が必要です。

代わりに、実際のインスタンスではなく、メタタイプ/クラス値であるタイプTaskData.Typeの値を渡します。

代わりに、fetchDataには引数がまったくありません。代わりにrealm.objects(T.self)に電話をかけて結果を得ることができます。

関連する問題