我有两个Viewcontroller A和B.A会在collectionview中下载所有照片,然后我可以点击单个单元格转到Viewcontroller B,这是表格视图,只显示从A传递的这个单个图像。
但它在应用程序第一次午餐时工作正常,但是一旦我在collectionview中添加新照片,然后我点击这张新照片转到Viewcontroller B但是B没有显示正确的照片显示其他照片。我在viewcronller A和B中打印出照片数据postImg
,数据相同,但B没有显示正确的照片。为什么?当我重建程序时它的工作问题似乎只发生在我添加新照片时。
以下是从服务器加载图片的代码
func loadPosts(){
let query = PFQuery(className: "posts")
query.whereKey("username", equalTo:PFUser.current()!.username!)
query.skip = self.picArray.count // skip the already loaded images
query.findObjectsInBackground { (objects, error) in
if error == nil {
if let objects = objects{
for object in objects{
self.collectionView?.performBatchUpdates({
let indexPath = IndexPath(row: self.uuidArray.count, section: 0)
self.uuidArray.append(object.value(forKey: "uuid") as! String)
self.picArray.append(object.value(forKey: "pic") as! PFFile)
self.collectionView?.insertItems(at: [indexPath])
}, completion: nil)
}
}
} else{
print(error!.localizedDescription)
}
}
}
然后var postImgData = [UIImage]()
是用于保存从上面的函数下载的所有照片的数组,这种可行性在CLASS Viewcontroll A的开头定义。
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return picArray.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
//define cell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! pictureCell
picArray[indexPath.row].getDataInBackground { (data, error) in
if error == nil {
cell.picImg.image = UIImage(data: data!)
self.postImgData.append(UIImage(data: data!)!)
} else {
print(error!.localizedDescription)
}
}
return cell
}
然后我点击单元格转到viewcontroller B。 postImg在Viewcontroller B的开头定义为全局可行的,以获取您在Viewcontroller A单元格上单击的图像日期。
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
postImg = postImgData[indexPath.row]
let post = storyboard?.instantiateViewController(withIdentifier: "postVC") as! postVC
self.navigationController?.pushViewController(post, animated: true)
}
然后在Viewcotnroller B中显示照片
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! postCell
cell.picImg.image = postImg
return cell
}
答案 0 :(得分:0)
首先:
void eliminate() {
char buff1[1000], buff2[1000], b[1000];
char* p = a, *q = b, *pq = b;
sprintf(q, "%s", p);
while (q != NULL && *q != '\0')
{
if (iswspace(*q))
{
sscanf(pq, "%s %s", buff1, buff2);
sprintf(p, "%s%s", buff1, buff2);
p += strlen(buff1);
pq = ++q;
}
q++;
}
}
你应该事先初始化数组并设置像self.postImgData [indexPath.row] = UIImage(数据:数据!)这样的数据! 我们如何确保图像的正确顺序
2
picArray[indexPath.row].getDataInBackground { (data, error) in
if error == nil {
cell.picImg.image = UIImage(data: data!)
self.postImgData.append(UIImage(data: data!)!) <== WHY do you append array?
} else {
print(error!.localizedDescription)
}
所以我建议将 postImg var移动到控制器B