2016-07-23 6 views
2

私はRealmを初めて使用しています。とても興味深く、既にデータを保存して検索しています。私が保存したデータでは、NSDate()も保存するので、ロジックLIFOで結果を並べ替えることができます。つまり、最後に保存されたものがテーブルビューに最初に表示されます。これは私のコードです!レルムの日付の昇順は常に失敗します

override func viewDidLoad() { 
    super.viewDidLoad() 

    let realmaki = try! Realm() 

    var eventodos = realmaki.objects(eventsNewSaved2) 
} 

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return 288.0 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let realm = try! Realm() 
    let eventodoscount = realm.objects(eventsNewSaved2).sorted("realmgettime", ascending: true).count 
     return eventodoscount 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier("savedCell", forIndexPath: indexPath) as! locationEventsTableViewCell 
     let realm = try! Realm() 
     let eventakiaSaved = realm.objects(eventsNewSaved2) 
     eventakiaSaved.sorted("realmgettime", ascending: true) 
     let task = eventakiaSaved[indexPath.row] as eventsNewSaved2 

     cell.eventTitle?.text = "\(task.realmtitle)" 
     cell.eventDate.text = "\(task.realmdate)" 
     cell.eventAttends.text = "\(task.realmattends)" 

     let imageDef : UIImage = UIImage(named: "noimage")! 

     if task.realmeventCover == "No Image Available" { 

      cell.eventImage.image = imageDef 
     } else { 
      let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT 
      dispatch_async(dispatch_get_global_queue(priority, 0)) { 

       let realm = try! Realm() 
       let eventakiaSaved = realm.objects(eventsNewSaved2) 
       eventakiaSaved.sorted("realmgettime", ascending: true) 
       let task = eventakiaSaved[indexPath.row] as eventsNewSaved2 
        let url = NSURL(string: task.realmeventCover) 

        if url != nil { 
         let data = NSData(contentsOfURL: url!) 
         dispatch_async(dispatch_get_main_queue()) { 
          cell.eventImage.image = UIImage(data: data!) 
         } 

        } else { 
         cell.eventImage.image = imageDef 
        } 
      } 
     } 

     return cell 
    } 

変数realmgettimeは、ユーザーが別のビューで保存ボタンを押している間、私は保存日付時刻オブジェクトです。 テーブルビューは、trueまたはfalseに昇順を設定しても変わりません。 何か考えてみませんか?

答えて

1

sorted(_:, ascending:)Results<T>を変更しません。 tableView(tableView:, cellForRowAtIndexPath:)で結果をソートしようとしましたが、それは何の意味もありません。戻り値を無視したためです。上記のコード

let eventakiaSaved = realm.objects(eventsNewSaved2) 
eventakiaSaved.sorted("realmgettime", ascending: true) 

は次のようにする必要があります:

var eventakiaSaved = realm.objects(eventsNewSaved2) 
var eventakiaSaved = eventakiaSaved.sorted("realmgettime", ascending: true) 

もっと良い方法は、メソッドをチェーンされます。

let eventakiaSaved = realm.objects(eventsNewSaved2) 
          .sorted("realmgettime", ascending: true) 

はまた、Resultsインスタンスは、結果が再フェッチする必要はありませんを意味し、基礎となるデータに変換するライブ、自動更新の図です。

https://realm.io/docs/swift/latest/#auto-updating-results

だから、同じクエリのたびに再フェッチする必要はありません。結果を一度保存​​し、同じスレッド内であればどこでも使用できます。 推奨方法は、次のようなものです:

... 
var eventodos: Results<eventsNewSaved2>? // Keep results as a model 
... 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let realm = try! Realm() 
    eventodos = realm 
     .objects(eventsNewSaved2) 
     .sorted("realmgettime", ascending: true) // Query only once 
} 

... 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return eventodoscount?.count ?? 0 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("savedCell", forIndexPath: indexPath) as! locationEventsTableViewCell 

    let task = eventodos[indexPath.row] 

    cell.eventTitle?.text = "\(task.realmtitle)" 
    cell.eventDate.text = "\(task.realmdate)" 
    cell.eventAttends.text = "\(task.realmattends)" 

    let imageDef : UIImage = UIImage(named: "noimage")! 

    if task.realmeventCover == "No Image Available" { 
     cell.eventImage.image = imageDef 
    } else { 
     let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT 
     dispatch_async(dispatch_get_global_queue(priority, 0)) { 
      let realm = try! Realm() 
      // Need re-fetch because this within sub-thread 
      let eventakiaSaved = realm 
       .objects(eventsNewSaved2) 
       .eventakiaSaved.sorted("realmgettime", ascending: true) 

      let task = eventakiaSaved[indexPath.row] 
      let url = NSURL(string: task.realmeventCover) 

      if url != nil { 
       let data = NSData(contentsOfURL: url!) 
       dispatch_async(dispatch_get_main_queue()) { 
        cell.eventImage.image = UIImage(data: data!) 
       } 
      } else { 
       cell.eventImage.image = imageDef 
      } 
     } 
    } 

    return cell 
} 
+0

LIFOは、ソートのため、私はfalse'を 'に' true'をを変更し、それが働いていたが、あなたのコードは完璧に動作します。どうしても理解できない –

関連する問題