私はこの非常に興味深いアプローチを見つけました ( Parse : PFObject アップロードの進行状況を追跡することは可能ですか)。目的の c カテゴリを迅速な拡張で変換しようとしました。しかし、私は値のタイプに過度に負担をかけていますunsigned long
。
次のコードを見てください - 例外がスローされます (行: let progress:Int32 = Int32(100*count/numberOfCyclesRequired)
):致命的なエラー: 浮動小数点値は、無限または NaN であるため、Int32 に変換できません。__block
また、カウントの変更がブロック外でも発生するというプレフィックスを迅速
に処理する方法もわかりません。
extension PFObject {
class func saveAllInBackground(objects: [AnyObject]!, chunkSize:Int, block: PFBooleanResultBlock!, progressBlock:PFProgressBlock) {
let numberOfCyclesRequired:Double = Double(objects.count / chunkSize)
var count:Double = 0
PFObject.saveAllInBackground(objects, chunkSize: chunkSize, block: block) { (trig:Bool) -> Void in
count++
let progress:Int32 = Int32(100*count/numberOfCyclesRequired)
progressBlock(progress)
}
}
class func saveAllInBackground(objects: [AnyObject]!, chunkSize:Int, block: PFBooleanResultBlock!, trigger:(Bool) -> Void) {
let range = NSMakeRange(0, objects.count <= chunkSize ? objects.count:chunkSize)
var saveArray:NSArray = (objects as NSArray).subarrayWithRange(range)
var nextArray:NSArray = []
if range.length < objects.count {
nextArray = (objects as NSArray).subarrayWithRange(NSMakeRange(range.length, objects.count-range.length))
}
PFObject.saveAllInBackground(saveArray) { (succeeded:Bool, error: NSError!) -> Void in
if (error == nil && succeeded && nextArray.count != 0) {
trigger(true)
PFObject.saveAllInBackground(nextArray, chunkSize: chunkSize, block: block, trigger: trigger)
} else {
trigger(true)
block(succeeded,error)
}
}
}
}
事前にご協力いただきありがとうございます。