-
Notifications
You must be signed in to change notification settings - Fork 0
/
AppGroupIO.swift
229 lines (209 loc) · 9.5 KB
/
AppGroupIO.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
//
// YashiAppGroupIO.swift
// 雅诗独立类库:AppGroup共享设置读写工具 v2.0 Swift中文版 (Xcode6.3) | beta
//
// 封装AppGroup的读写方法,支持对AppGroup的增删改查,URL和NSUserDefaults两种调用方式,JsonString和对象两种存储方式。
//
// Created by 神楽坂雅詩 on 15/4/18.
// Copyright (c) 2015 KagurazakaYashi/TerenceChen . All rights reserved.
//
// 依赖:Json2Array/Array2Json
// 输入:每个方法均可作为输入点
// 输出:每个方法均可作为输出点
//
import UIKit
class AppGroupIO: NSObject {
let 程序组名称:String = "group.CloudEmoticon" //AppGroup的名称
let 程序组设置路径:String = "Library/caches/CE2" //URL方式读写路径
let 程序组设置名称:String = "s" //字符串类型值存储Key
let 程序组对象名称:String = "o" //对象类型值存储Key
let 空白设置模型:String = "[[],[],[],[]]" //用于校验的空白Json模型
//新的数据模型生成方法(根据需要修改)
func 新建设置() -> NSArray {
let 新建设置模型:NSArray = [NSArray(),NSArray(),NSArray(),NSArray()]
return 新建设置模型
}
//获取此程序保存设置用的URL地址
func 组设置URL() -> URL {
var 组设置URL:URL = Foundation.FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: 程序组名称)!
组设置URL = 组设置URL.appendingPathComponent(程序组设置路径)
return 组设置URL
}
//获取此程序保存设置用的NSUserDefaults
func 组设置存储() -> UserDefaults? {
let 设置存储:UserDefaults? = UserDefaults(suiteName: 程序组名称)
return 设置存储
}
//检查是否保存过设置(输入可能为空的设置字符串检查有效性)
func 设置有效性校验(_ 设置值:NSString?) -> Bool {
if(设置值 == nil || 设置值!.isEqual(to: "") || 设置值!.isEqual(to: 空白设置模型)) {
return false
}
return true
}
//使用URL调用方式提取保存的字符串数组
func 读取设置URL模式() -> NSArray? {
let 设置值:NSString? = try? NSString(contentsOf: 组设置URL(), encoding: String.Encoding.utf8.rawValue)
if(设置有效性校验(设置值)) {
let 设置数组:NSArray = ArrayString().JSON字符串转数组(设置值!)
NSLog("[AppGroupIO]Group-URL读取操作")
return 设置数组
}
return nil
}
//使用URL调用方式写入字符串数组
func 写入设置URL模式(_ 设置数组:NSArray) {
let 设置值:NSString = ArrayString().数组转JSON字符串(设置数组)
do {
try 设置值.write(to: 组设置URL(), atomically: true, encoding: String.Encoding.utf8.rawValue)
} catch _ {
}
NSLog("[AppGroupIO]Group-URL写入操作")
}
//检查URL调用方式得到的内容是否有效
func 检查设置URL模式() -> Bool {
let 设置值:NSString? = try? NSString(contentsOf: 组设置URL(), encoding: String.Encoding.utf8.rawValue)
if(设置有效性校验(设置值)) {
return true
}
return false
}
//清除URL调用方式保存的全部内容
func 清除设置URL模式() {
let 设置值:NSString = NSString()
do {
try 设置值.write(to: 组设置URL(), atomically: true, encoding: String.Encoding.utf8.rawValue)
} catch _ {
}
NSLog("[AppGroupIO]Group-URL清除操作")
}
//使用NSUserDefaults提取保存的字符串数组
func 读取设置UD模式() -> NSArray? {
let 设置存储:UserDefaults? = 组设置存储()
if (设置存储 != nil) {
let 设置值:NSString? = 设置存储?.string(forKey: 程序组设置名称) as NSString?
if(设置有效性校验(设置值)) {
let 设置数组:NSArray = ArrayString().JSON字符串转数组(设置值!)
NSLog("[AppGroupIO]Group-UD读取操作")
return 设置数组
}
} else {
NSLog("[AppGroupIO]Group-UD读取UD初始化失败")
}
return nil
}
//使用NSUserDefaults写入字符串数组
func 写入设置UD模式(_ 设置数组:NSArray) {
let 设置存储:UserDefaults? = 组设置存储()
if (设置存储 != nil) {
let 设置值:NSString = ArrayString().数组转JSON字符串(设置数组)
设置存储?.set(设置值, forKey: 程序组设置名称)
NSLog("[AppGroupIO]Group-UD写入操作")
设置存储?.synchronize()
} else {
NSLog("[AppGroupIO]Group-UD写入UD初始化失败")
}
}
//检查NSUserDefaults调用方式得到的字符串是否有效
func 检查设置UD模式() -> Bool {
let 设置存储:UserDefaults? = 组设置存储()
if (设置存储 != nil) {
let 设置值:NSString? = 设置存储?.string(forKey: 程序组设置名称) as NSString?
if(设置有效性校验(设置值)) {
return true
}
}
return false
}
//清除NSUserDefaults的全部内容(设置和对象都有效)
func 清除设置和对象UD模式() {
let 设置存储:UserDefaults? = 组设置存储()
if (设置存储 != nil) {
let 应用ID:String? = Bundle.main.bundleIdentifier
if (应用ID != nil) {
设置存储?.removePersistentDomain(forName: 应用ID! as String)
}
let 设置字典:NSDictionary = (设置存储?.dictionaryRepresentation() as NSDictionary?)!
let 设置字典设置项:NSArray = 设置字典.allKeys as NSArray
for 当前设置项 in 设置字典设置项 {
let 当前设置项字符串:String = 当前设置项 as! String
设置存储?.removeObject(forKey: 当前设置项字符串)
}
NSLog("[AppGroupIO]Group-UD清除操作")
设置存储?.synchronize()
} else {
NSLog("[AppGroupIO]Group-UD清除UD初始化失败")
}
}
//使用NSUserDefaults提取保存的对象
func 读取对象UD模式() -> NSArray? {
let 设置存储:UserDefaults? = 组设置存储()
if (设置存储 != nil) {
let 对象:AnyObject? = 设置存储?.object(forKey: 程序组对象名称) as AnyObject?
if (对象 != nil && 对象 is NSArray) {
let 对象数组:NSArray = 对象 as! NSArray
NSLog("[AppGroupIO]Group-UD对象数组读取操作")
return 对象数组
}
} else {
NSLog("[AppGroupIO]Group-UD对象数组读取UD初始化失败")
}
return nil
}
//使用NSUserDefaults写入对象
func 写入对象UD模式(_ 对象数组:NSArray) {
let 设置存储:UserDefaults? = 组设置存储()
if (设置存储 != nil) {
设置存储?.set(对象数组, forKey: 程序组对象名称)
NSLog("[AppGroupIO]Group-UD对象数组写入操作")
设置存储?.synchronize()
} else {
NSLog("Group-UD对象数组写入UD初始化失败")
}
}
//检查NSUserDefaults调用方式得到的对象是否有效
func 检查对象UD模式() -> Bool {
let 设置存储:UserDefaults? = 组设置存储()
if (设置存储 != nil) {
let 对象:AnyObject? = 设置存储?.object(forKey: 程序组对象名称) as AnyObject?
if (对象 != nil && 对象 is NSArray) {
return true
}
}
return false
}
//可以在程序中内置一个plist文件,在第一次运行时用这个文件创建数据模型
func 从pliat创建设置数组(_ 文件名称:NSString) -> NSArray? {
let 文档文件夹数组:NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray
let 文档文件夹路径:NSString = 文档文件夹数组[0] as! NSString
let 设置列表文件路径:String = "\(文档文件夹路径)/\(文件名称)"
let 文件管理器 = Foundation.FileManager.default
if (文件管理器.isExecutableFile(atPath: 设置列表文件路径)) {
let 初始设置数组:NSArray? = NSArray(contentsOfFile: 设置列表文件路径 as String)
if (初始设置数组 != nil) {
return 初始设置数组!
} else {
NSLog("[AppGroupIO]plist读取失败。")
}
} else {
NSLog("[AppGroupIO]找不到plist文件。")
}
return nil
}
//清除标准程序设置
func 清除标准程序设置() {
let 设置存储:UserDefaults = UserDefaults.standard
let 应用ID:String? = Bundle.main.bundleIdentifier
if (应用ID != nil) {
设置存储.removePersistentDomain(forName: 应用ID! as String)
}
let 设置字典:NSDictionary = (设置存储.dictionaryRepresentation() as NSDictionary?)!
let 设置字典设置项:NSArray = 设置字典.allKeys as NSArray
for 当前设置项 in 设置字典设置项 {
let 当前设置项字符串:String = 当前设置项 as! String
设置存储.removeObject(forKey: 当前设置项字符串)
}
NSLog("[AppGroupIO]Group-UD清除操作")
设置存储.synchronize()
}
}