漢字検定対策アプリ 3級

 

スキマ時間を埋める漢検対策アプリ

f:id:ios-apps:20161020181424p:plain       f:id:ios-apps:20161020181501p:plain_

漢字検定対策アプリは簡単操作で自分が覚えていない問題だけを反復して解くことができるアプリです。

読み問題、四字熟語に対応しています。今後対応問題を増やしていく予定です。

 

フリック操作が気持ちよくてどんどんめくる!

単語カードのようにカードがたくさんあり、表には問題、裏には答えが書いてあります。

操作は簡単で知っているカードは右にフリック、知らないカードは左にフリックするだけ!

 

使い勝手の良さが抜群!

 

フリックだけで操作でき簡単にオリジナルの勉強カードができるので通学、帰宅時や寝る前など隙間時間にすぐに勉強することができます。

このアプリを使って、合格を勝ち取ろう!

 

Realmファイルが肥大化するときの対処法

バージョンは2.0.3です。
Realmを使っているとRealmファイルの容量が以上に大きくなっている場合があります。放っておくと数十MGから数百MBになったりします。
そのせいでアプリがクラッシュしたり、ずっと開けなくなったりするので大変です。

Realmファイルの容量が考えているよりも大きい場合は{{ RLMRealm }}は古い履歴データを残している可能性があります。

・・・中略・・・

この余分な領域は、最終的には再利用されるか消去されます。(強制的に空き領域を消去するには、
Realm().writeCopyToPath(_:encryptionKey:)を使ってファイルをコピーします。そのとき、自動的にファイルサイズが最適化されます。)
invalidateメソッドを呼び出し、Realmにこれまでに取得したデータはもう必要なくなったことを知らせてください。
そうすると、Realmは中間データの履歴を解放します。そして、次のアクセスのときに最新のデータを使うようにRealmが更新されます。

公式ドキュメントに上記のようにあるので、realm.writeCopy(toFile: )を使うかinvalidateを使うかで対応できます。
私の場合は、強制的にやりたかったので前者でRealmファイルの最適化を行なっています。
古い履歴データを消去するとスピードが遅くなるかと懸念していましたが、そこまで変わらなかったのでアプリを閉じた時に毎回消去を行っています。
消去のタイミングはそれぞれで測ってもらった方が良いと思います。

具体的にはAppDelegate.swiftにて以下のようにしました。

func applicationDidEnterBackground(_ application: UIApplication) {
do {
            let realm = try! Realm(configuration: self.realmConfigulation())
            try! realm.writeCopy(toFile: self.filePath().deletingLastPathComponent().appendingPathComponent("temp.realm"))
try FileManager.default.removeItem(at: self.filePath())
            try FileManager.default.moveItem(at: self.filePath().deletingLastPathComponent().appendingPathComponent("temp.realm"), to: self.filePath())
        } 
} catch let error as NSError {
            print("Error - \(error.localizedDescription)")
        }
    }

Realm Swiftのマイグレーション方法

意外と簡単でした!
バージョンは2.0.3です。

Realmは自動的に新しく追加されたプロパティと、削除されたプロパティを認識します。
そしてディスク上のスキーマを自動的にアップデートします。

とあるので、プロパティの消去と追加だけなら以下だけでokです。
schemaVersionというのはデフォルトでは0が入っているので今回は1を指定します。

let config = Realm.Configuration(
  schemaVersion: 1,
  migrationBlock: { migration, oldSchemaVersion in
    if (oldSchemaVersion < 1) {
    }
  })
Realm.Configuration.defaultConfiguration = config
let realm = try! Realm()


古いプロパティのデータを新しいプロパティに入れたい場合はこんな感じで書きます。

Realm.Configuration.defaultConfiguration = Realm.Configuration(
  schemaVersion: 1,
  migrationBlock: { migration, oldSchemaVersion in
    if (oldSchemaVersion < 1) {
      migration.enumerate(Person.className()) { oldObject, newObject in
        let firstName = oldObject!["firstName"] as! String
        let lastName = oldObject!["lastName"] as! String
        newObject!["fullName"] = "\(firstName) \(lastName)"
      }
    }
  })
Realm.Configuration.defaultConfiguration = config
let realm = try! Realm()


そして、マイグレーションが終わればRealmのconfigurationで
先ほど指定したスキーマのバージョンをしてあげれば正常に動くはずです。

Realm.Configuration(
            fileURL: url,
            readOnly: false,
            schemaVersion:1)

Xcode8で一括コメントアウトする方法

Xcode7までは何行か選択して
"Command + /" を実行すると、
選択した行をまとめてコメントアウトできたのですが、
Xcode8ではできなくなっていました。


このままでは個人的に非常に困るので解決策を探していたら見事にありましたので共有しておきます。
Xcode8でコメントアウトが効かない場合 - あぷすた



やり方は簡単で、ターミナルを開いて

$ sudo /usr/libexec/xpccachectl

と打ち込むだけのようです。


この後"Macを再起動"と書いてありましたが、自分の場合は再起動するのがめんどくさくて、少し放置していたらいつの間にか一括コメントアウトができるようになっていました。

Xcode8 不要なログを表示させない方法

 xcode8へアップデートして最初に気になったことなのでブログで共有しておきます。

 

まず、Product -> Scheme -> Edit Scheme...を選択。

左側の欄がRunになっていることを確認してArgumentsを選択。

 

次に以下の画面のように、

Nameに OS_ACTIVITY_MODE

Valueにdisableと記述して画面を閉じます。

f:id:ios-apps:20161029215229p:plain

 

これで不要なログの出力がされなくなります。

 

『Appliv』様に掲載いただきました!

本日、「Appliv」様にiPhoneアプリセンター試験対策が掲載されました!

 

センター試験対策
http://app-liv.jp/1166854629/

大学受験・センター試験対策 アプリランキング
http://app-liv.jp/education/juken/0554/

 

今後とも、よろしくお願いいたします。