【发布时间】:2015-10-29 04:32:25
【问题描述】:
我正在使用 Parse,并希望下载图像以供离线使用。我知道本地数据存储无法做到这一点,因此我决定将它们添加到 Core Data。
我已成功下载 PFFiles 并将它们放入一个数组中。然后我尝试为 NSData 创建一个数组,但是当我使用下面的代码时,数组计数始终为 0
class DealsDownloadViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
var trailID = [Int]()
var trailStep = [Int]()
var dealNumber = [Int]()
var imageFile = [PFFile]()
var imagesArray = [UIImage]()
var imageDataArray = [NSData]()
var number = 0
override func viewDidLoad() {
super.viewDidLoad()
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext
let dealsQuery = PFQuery(className: ("Deals"))
dealsQuery.orderByAscending("TrailId")
dealsQuery.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if let objects = objects {
for object in objects {
self.trailID.append(object["TrailID"] as! Int)
self.trailStep.append(object["TrailStep"] as! Int)
self.dealNumber.append(object["dealNumber"] as! Int)
self.imageFile.append(object["dealImage"] as! PFFile!)
}
for file in self.imageFile {
let dealImage = file
dealImage.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
if error == nil {
let image = UIImage(data: imageData!)
self.imageDataArray.append(imageData!)
self.imagesArray.append(image!)
} else {print("error here")}
})
print(self.trailID.count)
print(self.trailStep.count)
print(self.dealNumber.count)
print(self.imageDataArray.count)
print(self.imagesArray.count)
}
} else {print("problem making arrays")}
}
}
如果我将 Print 语句上移,我只会让它打印循环的每次迭代。
for file in self.imageFile {
let dealImage = file
dealImage.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
if error == nil {
let image = UIImage(data: imageData!)
self.imageDataArray.append(imageData!)
self.imagesArray.append(image!)
} else {print("error here")}
print(self.trailID.count)
print(self.trailStep.count)
print(self.dealNumber.count)
print(self.imageDataArray.count)
print(self.imagesArray.count)
})
}
} else {print("problem making arrays")}
}
}
在这种情况下,我可以看到数据已添加到 imagesArray 和 imageDataArray。
这似乎是一个如此简单的问题,但我要疯了。我做错了什么,这是将此数据添加到 Core Data 的最有效方法吗?我是否忽略了一些明显的东西?
我是编程新手,所以请指出我犯的任何错误,而且我作为 stackoverflow 的提问者特别新(在学习过程中你是不可或缺的)所以如果你需要任何我掌握的信息,请告诉我错过了。
感谢您的帮助。
更新 1
我已尝试按照 cmets 中的说明编辑代码,但仍然得到相同的结果。我已经在这段代码上移动了 Print 语句,它仍然给我与上面相同的结果。
for file in self.imageFile {
let dealImage = file
dealImage.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
if error == nil {
weak var aBlockSelf = self
let image = UIImage(data: imageData!)
aBlockSelf!.imageDataArray.append(imageData!)
self.imagesArray.append(image!)
}
print(self.trailID.count)
print(self.trailStep.count)
print(self.dealNumber.count)
print(self.imageDataArray.count)
print(self.imagesArray.count)
})
}
} else {print("problem making arrays")}
}
}
我错过了一些非常简单的东西吗?再次感谢您的帮助。
更新 2
这与(我认为)将打印语句移到 For 循环之外的代码相同。这让我从打印语句中得到 9,9,9,0,0,而我认为我应该期待 9,9,9,9,9。
for file in self.imageFile {
let dealImage = file
dealImage.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
if error == nil {
weak var aBlockSelf = self
let image = UIImage(data: imageData!)
aBlockSelf!.imageDataArray.append(imageData!)
self.imagesArray.append(image!)
}
})
}
print(self.trailID.count)
print(self.trailStep.count)
print(self.dealNumber.count)
print(self.imageDataArray.count)
print(self.imagesArray.count)
} else {print("problem making arrays")}
}
}
【问题讨论】:
标签: arrays xcode swift core-data parse-platform