LoginSignup
0
0

More than 5 years have passed since last update.

[Swift4,iOS,CoreData]NSFetchedResultsControllerでテーブルの日付別セクション分けする際の注意点

Last updated at Posted at 2017-11-27

概要

テーブルを使って、タイムスタンプを持っているデータを日付ごとにセクションわけして表示する方法は、いろいろなところで紹介れています。
例えば具体的な方法は

[Swift,iOS,CoreData]NSFetchedResultsControllerでテーブルの日付別セクション分け

を参照してください。
これまでこの方法で正しく動作していましたが、Swift4にマイグレーションさせた後、セクションに表示する日付が取れなくなりました。
いろいろ調べた結果、Transient に設定した Attribute に対応するモデルクラスのプロパティに @objc を付加する必要がありました。
Swift3 から Swift4 への自動マイグレーションで @objc は、付加されませんでした。

具体的な変更箇所

Transient に設定した Attribute の名前が sectionIdentifier であるとき、そのモデルクラスのプロパティの先頭に @objc を付加する。
(以下のコードの内容は、概要欄で紹介したリンク先と基本的に同じです。)

@objc var sectionIdentifier: String {

        get {

            self.willAccessValue(forKey: "sectionIdentifier")
            var tmp = self.primitiveValue(forKey: "sectionIdentifier") as? String
            self.didAccessValue(forKey: "sectionIdentifier")

            if tmp == nil {

                let calendar = Calendar.current

                let components = calendar.dateComponents([.year, .month, .day], from: self.completion_date as Date)

                tmp = String(format: "%ld", components.year! * 10000 + components.month! * 100 + components.day!)

                self.setPrimitiveValue(tmp, forKey: "sectionIdentifier")
            }

            return tmp!

        }

    }

(Xcode9.1 Swift4.0 使用)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0