我下载了json字符串后,请求数据大约是7MB,意味着json字符串大约是7MB。下载后,我想将数据保存到realm模型对象(表)中,进度如< / p>
(1/7390)至(7390/7390) - &gt; (插入的数据/要插入的总数据)
我在我的应用程序中使用Alamofire作为HTTPClient。那么,从服务器下载后如何将进度数据插入我的领域对象模型?任何帮助都会导致我是初学者。
我不会完全显示数据模型,所以,任何一个例子都是值得赞赏的。让我说我的json字符串是。
{
{
name : Smith,
age : 23,
address : New York
},
{
name : Adam,
age : 22,
address : Maimi
},
{
name : Johnny,
age : 33,
address : Las Vegas
},
... about 7392 records
}
答案 0 :(得分:1)
假设你有一个标签可以做到这一点
好吧。
假设您也使用MVVM模式
确定。
ViewController有标签,&#34;观察&#34; (*) ViewModel属性&#39;进度&#39;
ViewModel拥有属性&#39;进展&#39;
class ViewModel: NSObject {
dynamic var progress: Int = 0
func save(object object: Object) {
do {
let realm = try Realm()
try realm.write({ () -> Void in
// Here your operations on DB
self.progress += 1
})
} catch let error as NSError {
ERLog(what: error)
}
}
}
这样,当&#34;进展&#34;时,会通知viewController。更改,您可以更新UI。
你的VC应该有这样的方法,例如viewDidLoad调用:
private func setupObservers() {
RACObserve(self.viewModel, keyPath: "progress").subscribeNext { (next: AnyObject!) -> Void in
if let newProgress = next as? Int {
// Here update label
}
}
}
RACObserve是一个全局函数:
import Foundation
import ReactiveCocoa
func RACObserve(target: NSObject!, keyPath: String) -> RACSignal {
return target.rac_valuesForKeyPath(keyPath, observer: target)
}
(*)例如,您可以使用ReactiveCocoa。
答案 1 :(得分:1)
来自Realm的Katsumi。首先,Realm无法知道数据的总量。因此,计算进度并通知它应该在您的代码中完成。
总计是结果数组的计数。将count
存储为本地变量。然后定义progress
变量来存储持久化的数量。每次将对象保存到Realm时,都应增加progress
。然后通知进度。
let count = results.count // Store count of results
if count > 0{
if let users = results.array {
let progress = 0 // Number of persisted
let realm = try! Realm()
try realm.write {
for user in users{
let userList=UserList()
[...]
realm.add(userList,update: true)
progress += 1 // After save, increment progress
notify(progress, total: count)
}
}
}
}
因此有几种方法可以通知进度。我们在这里使用NSNotificationCenter
例如:
func notify(progress: Int, total: Int) {
NSNotificationCenter
.defaultCenter()
.postNotificationName("ProgressNotification", object: self, userInfo: ["progress": progress, "total": total])
}