将数据插入领域数据库并取得进展?
Posted
技术标签:
【中文标题】将数据插入领域数据库并取得进展?【英文标题】:Inserting data into realm DB with progress? 【发布时间】:2016-03-16 08:32:16 【问题描述】:下载json字符串后,我有大约7MB的请求数据,这意味着json字符串大约为7MB。下载后,我想将数据保存到领域模型对象(表)中,进度如下
(1/7390) 到 (7390/7390) ->(插入的数据/要插入的总数据)
我在我的应用程序中使用 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
【问题讨论】:
您是要自己记录(1/7390)到(7390/7390)还是要在界面中显示给用户? 我想在插入时显示用户(该字段将增加/总记录) 【参考方案1】:假设您有一个标签可以做到这一点。 好的。 假设您也使用MVVM 模式。 好的。
ViewController 具有标签并“观察”(*) ViewModel 属性“进度” ViewModel 具有属性“进度”
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)
通过这种方式,当“进度”发生变化时会通知 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。
【讨论】:
好的,我试一试,如果成功,我会给出真实的答案。谢谢先生,您的帮助 嗯,我是刚改用 Swift 的 java 开发人员。所以,我不知道任何客观的 -C 代码。所以,如果你不介意的话,有任何示例应用程序可以帮助我吗?还对它所做的步骤进行了一些评论。 self.viewModel 说“无法将 ViewModel 类型的值转换为预期的参数类型 NSObject ”。请帮忙?任何细节表示赞赏 我的错,我错过了 ViewModel 需要从 NSObject 继承,检查更新 我还是听不懂,我的意思是没有出现进度。;(。如果可以的话,我想通过邮件与你交谈。因为我想在那里分享我的代码。跨度> 【参考方案2】:来自Realm的Katsumi。首先,Realm 无法知道数据总量。所以计算进度并通知它应该在你的代码中完成。
总计是结果数组的计数。将count
存储为局部变量。然后定义progress
变量来存储持久化的数量。 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])
【讨论】:
谢谢,我试试看。 :D以上是关于将数据插入领域数据库并取得进展?的主要内容,如果未能解决你的问题,请参考以下文章