- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在下载数据时使用我的应用程序。不想被装载机打扰。我正在执行几个 alamofire GET 调用。我需要什么才能在做事时拥有流畅的应用程序。
let headers = [ "header" : "pass"
]
var nextCheck = next
if(next > count){
let tempN = next - 1000
nextCheck = count - tempN
}
Alamofire.request(.GET, urlDomain + "_table1?offset=\(nextCheck)", headers: headers, encoding: .URL)
.responseJSON() { response in
if response.result.isSuccess {
let json = JSON(response.result.value!)
//print(json)
let done = true
var doneDownloading = false
for i in 0..<json["resource"].count {
let id_pobor = json["resource"][i]["id_bor"].stringValue
let misto = json["resource"][i]["mio"].stringValue
let nazev_oc = json["resource"][i]["naze"].stringValue
let tel = json["resource"][i]["tel"].stringValue
let ulice = json["resource"][i]["uli"].stringValue
let exp_logo = json["resource"][i]["logo"].stringValue
let count = json["meta"]["count"].intValue
let next = json["meta"]["next"].intValue
if(i == json["resource"].count - 1){
doneDownloading = true
}
completionHandler(done, id_pobor, misto, nazev_oc, gpsn, tel, ulice, exp_logo, gpse, id_obor, www, Id_prov, cinnost, psc, id_region, id_oblast, logo, provoz, eshop, count, next, doneDownloading)
}
if(json["resource"].count == 0){
completionHandler(done, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 0, 0, true)
}
} else {
completionHandler(false, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 0, 0, true)
}
此方法通过多偏移分页完成多次。
我就是这样调用这个方法的。我正在使用 REALM 来存储它。我正在加载 40 000 多行
private func getDataForE21Table(){
self.getReq.getE21(nextOffsetE21, count: countOffsetE21) { (done, id_pobor, misto, nazev_oc, gpsn, tel, ulice, exp_logo, gpse, id_obor, www, Id_prov, cinnost, psc, id_region, id_oblast, logo, provoz, eshop, count, next, doneDownloading) in
if(done){
self.saveToRealm.saveE21(id_pobor, misto: misto, nazev_oc: nazev_oc, gpsn: gpsn, tel: tel, ulice: ulice, exp_logo: exp_logo, gpse: gpse, id_obor: id_obor, www: www, Id_prov: Id_prov, cinnost: cinnost, psc: psc, id_oblast: id_oblast, logo: logo, provoz: provoz)
if(doneDownloading){
self.s.saveTableDates(self.s.e21Time, forKey: "e21Time")
self.nextOffsetE21 = self.nextOffsetE21 + 1000
self.countOffsetE21 = count
NSNotificationCenter.defaultCenter().postNotificationName("loadMoreDataE21", object: nil)
}
} else {
SwiftLoader.hide()
}
}
}
我的类需要在后台运行
import Foundation
import SwiftLoader
import RealmSwift
class Synchronize {
private let getReq = GetReq()
private let postReq = PostReq()
private let saveToRealm = SavaDataToRealmDatabase()
private let arrOfTables = ["e21", "e21sle", "evi22", "evi23oc", "regiony"]
private let s = Session.sharedInstance
private var nextOffsetE21Sle = 0
private var countOffsetE21Sle = 1000
private var nextOffsetE21 = 0
private var countOffsetE21 = 1000
func syncDb(){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
self.getSessionToken()
})
}
private func getSessionToken(){
postReq.sessionTokenRefresh { (done) in
if(done){
self.getReq.getTimeStampOfUpdatedTables({ (done) in
if(done){
if(self.s.e21TimeNeedUpdate){
self.deleteObject(1)
self.getDataForE21Table()
} else {
Session.sharedInstance.progress += 0.2
NSNotificationCenter.defaultCenter().postNotificationName("checkForLoadedData", object: nil)
}
if(self.s.e21sleTimeNeedUpdate){
self.deleteObject(2)
self.getDataForE21sleTable()
} else {
Session.sharedInstance.progress += 0.2
NSNotificationCenter.defaultCenter().postNotificationName("checkForLoadedData", object: nil)
}
if(self.s.evi22TimeNeedUpdate){
self.deleteObject(3)
self.getDataForE22()
} else {
Session.sharedInstance.progress += 0.2
NSNotificationCenter.defaultCenter().postNotificationName("checkForLoadedData", object: nil)
}
if(self.s.evi23ocTimeNeedUpdate){
self.deleteObject(4)
self.getDataForE23()
} else {
Session.sharedInstance.progress += 0.2
NSNotificationCenter.defaultCenter().postNotificationName("checkForLoadedData", object: nil)
}
if(self.s.regionTimeNeedUpdate){
self.deleteObject(5)
self.getDataForRegion()
} else {
Session.sharedInstance.progress += 0.2
NSNotificationCenter.defaultCenter().postNotificationName("checkForLoadedData", object: nil)
}
}
})
} else {
SwiftLoader.hide()
}
}
}
private func loadMoreDataE21Sle(){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
if(self.nextOffsetE21Sle <= self.countOffsetE21Sle) {
self.getDataForE21sleTable()
} else {
Session.sharedInstance.progress += 0.2
NSNotificationCenter.defaultCenter().postNotificationName("checkForLoadedData", object: nil)
}
})
}
private func loadMoreDataE21(){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
print("backgroundThread")
if(self.nextOffsetE21 <= self.countOffsetE21) {
self.getDataForE21Table()
} else {
Session.sharedInstance.progress += 0.2
NSNotificationCenter.defaultCenter().postNotificationName("checkForLoadedData", object: nil)
}
})
}
private func getDataForE21Table(){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
self.getReq.getE21(self.nextOffsetE21, count: self.countOffsetE21) { (done, id_pobor, misto, nazev_oc, gpsn, tel, ulice, exp_logo, gpse, id_obor, www, Id_prov, cinnost, psc, id_region, id_oblast, logo, provoz, eshop, count, next, doneDownloading) in
if(done){
self.saveToRealm.saveE21(id_pobor, misto: misto, nazev_oc: nazev_oc, gpsn: gpsn, tel: tel, ulice: ulice, exp_logo: exp_logo, gpse: gpse, id_obor: id_obor, www: www, Id_prov: Id_prov, cinnost: cinnost, psc: psc, id_oblast: id_oblast, logo: logo, provoz: provoz)
if(doneDownloading){
self.s.saveTableDates(self.s.e21Time, forKey: "e21Time")
self.nextOffsetE21 = self.nextOffsetE21 + 1000
self.countOffsetE21 = count
self.loadMoreDataE21()
}
} else {
SwiftLoader.hide()
}
}
})
}
private func getDataForE21sleTable(){
self.getReq.getE21sle(nextOffsetE21Sle, count: countOffsetE21Sle) { (done, vyse_sle, druh_sle, popis_sle, id_pobor, id_sle, id_prov, count, next, carte, doneDownloading) in
if(done){
self.saveToRealm.saveE21sle(vyse_sle, druh_sle: druh_sle, popis_sle: popis_sle, id_pobor: id_pobor, id_sle: id_sle, id_prov: id_prov, carte: carte)
if(doneDownloading){
self.s.saveTableDates(self.s.e21sleTime, forKey: "e21sleTime")
self.nextOffsetE21Sle = self.nextOffsetE21Sle + 1000
self.countOffsetE21Sle = count
self.loadMoreDataE21Sle()
}
} else {
SwiftLoader.hide()
}
}
}
private func getDataForE22(){
self.getReq.getE22 { (done, id_skup, skuptxt_sk, id_obor, skuptxt_cz, obortxt_sk, obortxt_cz, doneDownloading) in
if(done){
self.saveToRealm.saveE22(id_skup, skuptxt_sk: skuptxt_sk, id_obor: id_obor, skuptxt_cz: skuptxt_cz, obortxt_sk: obortxt_sk, obortxt_cz: obortxt_cz)
if(doneDownloading){
Session.sharedInstance.progress += 0.2
self.s.saveTableDates(self.s.evi22Time, forKey: "evi22Time")
NSNotificationCenter.defaultCenter().postNotificationName("checkForLoadedData", object: nil)
}
} else {
SwiftLoader.hide()
}
}
}
private func getDataForE23(){
self.getReq.getE23oc { (done, nazev, psc, id_oc, oblast, sphere, misto, region, stat, statut, adresa, public_, doneDownloading) in
if(done){
self.saveToRealm.saveE23(nazev, psc: psc, id_oc: id_oc, oblast: oblast, sphere: sphere, misto: misto, region: region, stat: stat, statut: statut, adresa: adresa, public_: public_)
if(doneDownloading){
Session.sharedInstance.progress += 0.2
self.s.saveTableDates(self.s.evi23ocTime, forKey: "evi23ocTime")
NSNotificationCenter.defaultCenter().postNotificationName("checkForLoadedData", object: nil)
}
} else {
SwiftLoader.hide()
}
}
}
private func getDataForRegion(){
self.getReq.getRegiony { (done, oblast, lokalita, okres, poradi, uroven, doneDownloading) in
if(done){
self.saveToRealm.saveRegion(oblast, lokalita: lokalita, okres: okres, poradi: poradi, uroven: uroven)
if(doneDownloading){
Session.sharedInstance.progress += 0.2
self.s.saveTableDates(self.s.regionTime, forKey: "regionTime")
NSNotificationCenter.defaultCenter().postNotificationName("checkForLoadedData", object: nil)
}
} else {
SwiftLoader.hide()
}
}
}
private func deleteObject(id:Int){
let realm = try! Realm()
try! realm.write {
switch id {
case 1: realm.delete(realm.objects(E21))
case 2: realm.delete(realm.objects(E21sle))
case 3: realm.delete(realm.objects(E22))
case 4: realm.delete(realm.objects(E23oc))
case 5: realm.delete(realm.objects(Regiony))
default:break
}
}
}
最佳答案
默认情况下,Alamofire 在主队列 (source) 上调度响应处理程序。但是,您可以使用 response() 方法的 queue: 参数指定一个不同的参数来保持 UI 响应:
Alamofire.request(.GET, urlDomain + "_table/e21?offset=\(nextCheck)", headers: headers, encoding: .JSON)
.responseJSON(queue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { response in
请记住,如果您在响应处理程序中进行 UI 更新,则需要在主队列中进行:
dispatch_async(dispatch_get_main_queue()) {
// update some UI
}
关于swift - 下载 Alamofire 时应用卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37156123/
我需要做一个 POST请求带有 JSON 的 HTTP 正文对象,但我还需要在同一个请求中使用 url 查询参数。 POST: http://www.example.com/api/create?pa
这里是原始的 github issue , 支持者建议在这里开一个帖子以获得更多公众支持。 我正在使用 xcode 6.4。 $ pod --version 0.38.2 我的播客文件: platfo
我在项目中使用cocoapods安装alamofire,它在模拟器中运行良好。当我想在 iphone 6s(ios 13.3.1) 上运行我的应用程序时,它崩溃并显示错误消息。我的 Xcode 版本是
如何取消 Alamofire 共享管理器中的所有请求? 这是我的功能: class func cancelAllRequests() { Alamofire.Manager.sharedIns
我想有多个适配器到同一个 SessionManager,这可能吗? 我的用例是: 从适配器设置默认 header 如果是 basic_auth:添加 basic_auth_adapter 如果是tok
调用 Alamofireobject 映射器的正确方法吗? 有人对我的问题提出建议吗? 最佳答案 func postRequestSample() { let
我是 IOS 的新手,这是我的第一个项目,我想在我的项目中使用 Alamofire 库 我按照所有步骤使用 Cocoapods 安装库,一切都应该正常工作,但我收到这个错误“No这样的模块'Alamo
我是 Swift 的新手,来自 Alamorefire Referencee , 你可以做以下的请求 Alamofire.request(.GET, "http://httpbin.org/get")
默认情况下,Alamofire 发送一个包含 gzip 的 Accept-Encoding header 。我如何告诉它停止这样做?我确实接受 gzip,我很高兴 Alamofire 为我解析它,但是
AFImage 的新功能。我不确定这是否是获取图像并将其缓存的正确方法。似乎每次运行时它都没有访问服务器,但我不确定它是否被缓存了?我走运了?看来我在下面使用的语法也过时了...... 任何评论表示赞
我检查了新的 Alamofire 安装步骤。 由于我需要针对 iOS 7.0,我想知道是否导入 Alamofire.swift是否足以让它工作? 为什么文档声明将函数包裹在 Struct Alamof
在 Alamofire 5 Beta 中,SessionManager已被 Session 取代. 我想知道现在分配 RequestAdapter 的过程是什么,因为这是一个 var在 Alamofi
任何人都可以提出一些关于如何使用 header 扩展 alamofire 的建议,例如需要在发送之前设置的 Content-MD5? 最佳答案 这是一个有点老的问题,但我遇到了同样的问题,我使用以下代
有没有人看到用指纹而不是公钥来固定 Alamofire 的方法? 对不起,如果这已经得到回答,我还没有在任何地方看到它。 谢谢 最佳答案 这最终变得非常简单。下面的代码可能并不完美,我的真实代码正在做
我想运行一个 Alamofire 请求,该请求使用先前 Alamofire 请求的结果作为参数。为了简单起见: //Code1 Alamofire.request("URL", met
当我尝试在应用程序中的 Xcode 中运行我的 iOS 应用程序时: dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
我想运行一个使用先前 Alamofire 请求的结果作为参数的 Alamofire 请求。为简单起见: //Code1 Alamofire.request("URL", method:
更新:我解决了这个问题。请在下面查看我的回答(在问题和评论下方)。 这个问题被标记为重复,但它是不同的,因为它是一个全新的错误,我无法通过任何搜索找到它。 我尝试将 Alamofire 安装到我的 X
我想先 POST 到一个网站,然后 GET 另一个网站获取数据。 并更改 POST 中的 key ,并在 for 循环中继续这样做 5 次以获得不同的数据。 但是,程序总是先运行 POST 5 次,然
我正在使用 Alamofire 5(测试版 1)为 WooCommerce 编写 API 客户端,这将允许我获取订单、优惠券等以及创建它们。注意我使用的是新的 .responseDecodable功能
我是一名优秀的程序员,十分优秀!