Recommended
Document based application
The Bash in Tokyo : AppKitとUIKit
IBM Watson Services for Core ML
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
Approach of Prototyping for making Application User Interface about iOS
Gulp WordPress @Grand-Frontend-Osaka 2015 Summer
SwiftとReactNativeで似たようなUIを作った際の記録
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
レガシーフリーOSに必要な要素技術 legacy free os
iOSでのFramework導入のおさらい #関モバ
iOSでライブラリを提供する際に気をつけたいこと
More Related Content
Document based application
The Bash in Tokyo : AppKitとUIKit
What's hot (13)
IBM Watson Services for Core ML
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
Approach of Prototyping for making Application User Interface about iOS
Gulp WordPress @Grand-Frontend-Osaka 2015 Summer
SwiftとReactNativeで似たようなUIを作った際の記録
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
Similar to 独自Documentクラス (20)
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
レガシーフリーOSに必要な要素技術 legacy free os
iOSでのFramework導入のおさらい #関モバ
iOSでライブラリを提供する際に気をつけたいこと
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
使い倒そう Visual Studio Code!~クラウド連携や遠隔ペアプロ、 もちろん Git も便利に~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
SwiftとCocoaPodsで始めるサクサクiOS開発!
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
More from 幸雄 村上 (16)
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
Cloud kitを使った日記アプリで写真をどう扱うか
独自Documentクラス8. • iOS 5 からUIDocumentクラスが用意されたが、少々、オ
ーバースペック。
• 発表者は、以前から、独自のDocumentクラスを用意して
いた。
10. class Document {
var version: String
private var _uniqueIdentifier: String
var uniqueIdentifier: String {
return _uniqueIdentifier
}
static let sharedInstance: Document = {
let instance = Document()
return instance
}()
init() {
let infoDictionary = Bundle.main.infoDictionary! as Dictionary
self.version = infoDictionary["CFBundleShortVersionString"]! as! String
self._uniqueIdentifier = ""
}
deinit {
}
func load() {
loadDefaults()
}
func save() {
updateDefaults()
}
private func clearDefaults() {
let userDefaults = UserDefaults.standard
if userDefaults.object(forKey: "version") != nil {
userDefaults.removeObject(forKey: "version")
}
if userDefaults.object(forKey: "uniqueIdentifier") != nil {
userDefaults.removeObject(forKey: "uniqueIdentifier")
}
}
private func updateDefaults() {
let userDefaults = UserDefaults.standard
var versionString: String = ""
if userDefaults.object(forKey: "version") != nil {
versionString = userDefaults.object(forKey: "version") as! String
}
if versionString.compare(self.version) != .orderedSame {
userDefaults.setValue(self.version, forKey: "version")
userDefaults.synchronize()
}
var uniqueIdentifier: String = ""
if userDefaults.object(forKey: "uniqueIdentifier") != nil {
uniqueIdentifier = userDefaults.object(forKey: "uniqueIdentifier") as! String
}
if uniqueIdentifier.compare(self.uniqueIdentifier) != .orderedSame {
userDefaults.setValue(self.uniqueIdentifier, forKey: "uniqueIdentifier")
userDefaults.synchronize()
}
}
private func loadDefaults() {
let userDefaults = UserDefaults.standard
var versionString: String = ""
if userDefaults.object(forKey: "version") != nil {
versionString = userDefaults.object(forKey: "version") as! String
}
if versionString.compare(self.version) != .orderedSame {
/* バージョン不一致対応 */
clearDefaults()
_uniqueIdentifier = UUID.init().uuidString
}
else {
/* 読み出し */
if userDefaults.object(forKey: "uniqueIdentifier") != nil {
_uniqueIdentifier = userDefaults.object(forKey: "uniqueIdentifier") as! String
}
}
}
private func modelDir() -> String {
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
if paths.count < 1 {
return ""
}
var path = paths[0]
path = path.appending(".model")
return path
}
private func modelPath() -> String {
let path = modelDir().appending("/model.dat")
return path;
}
}