我正在制作一个用 Swift 编写的高尔夫应用程序。在我的应用程序内部,我有一个搜索栏,用户可以在其中搜索高尔夫球场。我在 Xcode 中有一个包含大型高尔夫球场数据库的大型 JSON 文件。我解析这个 JSON 数据库以提供高尔夫球场的名称和位置,然后在用户在搜索栏中搜索时显示它们。问题是 JSON 文件大小为 17MB,大约有 18,000 个高尔夫球场,这使得解析过程很长,并且高尔夫球场名称在用户开始在搜索栏中输入时不会开始填充,直到大约 6 秒。
我目前有一个 DataManager 类,它可以抓取我的 JSON 文件。我使用 SwiftyJSON 来帮助解析数据,然后将该数据附加到数组中,以便我可以在搜索栏的表视图中显示它。
有关如何加快解析如此大文件或减小文件大小的过程的任何建议?
提前致谢!
-我的数据管理器和解析我的 JSON 文件的函数的代码:
数据管理器:
class DataManager {
class func getGolfCoursesFromFileWithSuccess(success: ((data: NSData) -> Void)) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let filePath = NSBundle.mainBundle().pathForResource("golfCourseData",ofType:"json")
var readError:NSError?
do {
let data = try NSData(contentsOfFile:filePath!,
options: NSDataReadingOptions.DataReadingUncached)
success(data: data)
} catch let error as NSError {
readError = error
print(readError)
} catch {
fatalError()
}
})
}
}
Run Code Online (Sandbox Code Playgroud)
解析 …
所以我有一个应用程序(用Swift编写),允许用户在searchController中搜索高尔夫球场.然后他们可以选择该课程,然后选择的课程进入tableView.我正在为搜索控制器和所选课程列表使用相同的视图控制器.
我遇到的问题是我希望用户能够滑动以删除他们选择的课程,但不是在搜索控制器处于活动状态时填充搜索控制器的课程.滑动删除操作正在常规tableView中工作.当searchController处于活动状态时,我将其置于禁用删除按钮的位置.但是,如果searchController处于活动状态,我想要做的就是没有单元格能够完全滑动.似乎无法让它发挥作用.有什么建议?谢谢,麻烦您了.
这是我的代码:
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if searchController.active {
UITableViewCellEditingStyle.None
} else {
let deletedValue = previousCoursesFromRealm[indexPath.row]
if editingStyle == UITableViewCellEditingStyle.Delete {
let realm = try! Realm()
try! realm.write {
realm.delete(deletedValue)
}
coursesTableView.reloadData()
}
}
}
Run Code Online (Sandbox Code Playgroud)