试图创buildcollections夹button来添加collections夹列表中的项目

我试图在CollectionViewCell上创build最喜欢的button,以将项目保存到collections夹列表中。 当我点击最喜欢的图标button,它成功地添加到喜好列表类的数组中选定的单元格项,并显示在collections夹列表中。 当我点击最喜欢的button时,根据值已经保存或没有改变它的形象。 当我试图保存在NSUserDefaults喜欢的列表数组它保存,也显示值时,我检索它。 但是,当我从模拟器closures我的应用程序,并再次运行它不显示在我保存在NSUserDefaultscollections列表数组中的值,也想设置button图像状态根据项目已经添加或不。

输出当我点击最喜欢的。 closures我的应用程序后再运行。 谁能告诉我如何解决这个问题。 或者任何人都可以请修复它在我的项目。 谢谢

import UIKit var url : [NSString] = [ "https://www.youtube.com/watch?v=9h30Bx4Klxg", "https://www.youtube.com/watch?v=ij_0p_6qTss", "https://www.youtube.com/watch?v=AJtDXIazrMo", "https://www.youtube.com/watch?v=H202k7KfZL0", "https://www.youtube.com/watch?v=CGyEd0aKWZE", "https://www.youtube.com/watch?v=AtKZKl7Bgu0", "https://www.youtube.com/watch?v=4SYlLi5djz0"] var image : [NSString] = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg"] class LiveCollectionView: UIViewController, UICollectionViewDataSource,UIWebViewDelegate { @IBOutlet weak var collectionView: UICollectionView! override func viewDidLoad() { super.viewDidLoad() } override func viewDidAppear(animated: Bool) { let value = UIInterfaceOrientation.Portrait.rawValue UIDevice.currentDevice().setValue(value, forKey: "orientation") } func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return url.count } func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! LiveCollectionViewCell cell.imageView.image = UIImage(named: image[indexPath.row] as String) cell.playBt.addTarget(self, action: Selector("webView:"), forControlEvents: UIControlEvents.TouchUpInside) cell.playBt.tag = indexPath.row cell.heartBt.tag = indexPath.row return cell } func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){ } } 

 import UIKit class LiveCollectionViewCell: UICollectionViewCell{ var showPlayButton = true var number = Int() var secondNumber = Int() @IBOutlet weak var playBt: UIButton! @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var heartBt: UIButton! @IBAction func heartBt(sender: UIButton) { var btn : NSInteger btn = sender.tag as NSInteger let uValues = url[btn] let iValues = image[btn] if showPlayButton == true{ u.append(url[btn]) i.append(image[btn]) self.heartBt.setImage(UIImage(named: "rheart"), forState: UIControlState.Normal) showPlayButton = false print("rHeart xxxxxxxxxxxxxxx") }else{ for check in u { number++ print(number) if uValues == check{ print(u) u.removeAtIndex(number-1) number = 0 print("RemoVe at indext path") print(u) break } } for check2 in i{ secondNumber++ print(secondNumber) if iValues == check2{ print(i) i.removeAtIndex(secondNumber-1) secondNumber = 0 print("RemoVe at indext path") print(i) self.heartBt.setImage(UIImage(named: "wHeart"), forState: UIControlState.Normal) showPlayButton = true print("wHeart ........") break } } } } } 

 import UIKit var u : [NSString] = [] var i : [NSString] = [] class FavoriteTvViewController: UIViewController , UICollectionViewDelegate{ var uV : NSArray = [] var iV : NSArray = [] @IBOutlet weak var collectionView: UICollectionView! let reuseIdentifier = "cell" override func viewDidLoad(){ } override func viewWillAppear(animated: Bool) { collectionView.reloadData() NSUserDefaults.standardUserDefaults().setObject(u, forKey: "u") NSUserDefaults.standardUserDefaults().setObject(i, forKey: "i") NSUserDefaults.standardUserDefaults().synchronize() uV = NSUserDefaults.standardUserDefaults().arrayForKey("u") as! NSArray iV = NSUserDefaults.standardUserDefaults().arrayForKey("i") as! NSArray print("uV values.. \(uV)") print("iV values.. \(iV)") } func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return uV.count } func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> FavoriteTvCollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! FavoriteTvCollectionViewCell cell.imageView.image = UIImage(named: iV[indexPath.row] as! String) return cell } } 

 import UIKit class FavoriteTvCollectionViewCell: UICollectionViewCell { @IBOutlet weak var imageView: UIImageView! } 

我已经检查了你的示例项目,我做了一个小的改变,现在它工作正常。

 override func viewWillAppear(animated: Bool) { collectionView.reloadData() //You have check for availablity of favorute item before adding to userdefault if u.count > 0 { NSUserDefaults.standardUserDefaults().setObject(u, forKey: "u") NSUserDefaults.standardUserDefaults().setObject(i, forKey: "i") NSUserDefaults.standardUserDefaults().synchronize() } uV = NSUserDefaults.standardUserDefaults().arrayForKey("u")! iV = NSUserDefaults.standardUserDefaults().arrayForKey("i")! print("uV values.. \(uV)") print("iV values.. \(iV)") } 

检查对象的可用性之前,将其添加到Userdefault.Now其工作正常试一试,让我知道答复pls。

编辑:我已经编辑你的代码现在它工作正常,我听到通过列出所有这些由我做的变化。

  1. LiveCollectionView.swift中

    声明两个对象并在viewdidload中:

      var MutableArray:NSMutableArray! let defaults = NSUserDefaults.standardUserDefaults() override func viewDidLoad() { super.viewDidLoad() MutableArray = NSMutableArray() if let HaveUrl = defaults.objectForKey("u"){ u = HaveUrl.mutableCopy() as! [NSString] } if let HaveImage = defaults.objectForKey("i"){ i = HaveImage.mutableCopy() as! [NSString] } if let CheckAvailability = defaults.objectForKey("Fav_Unfav"){ MutableArray = CheckAvailability.mutableCopy() as! NSMutableArray }else{ for var Check in image { print(Check) MutableArray.addObject("wHeart") } } } 

    cellForItemAtIndexPath:

     //Add this New Line cell.heartBt.setImage(UIImage(named: MutableArray[indexPath.row] as! String), forState: UIControlState.Normal) 
  2. LiveCollectionViewCell.swift:

      class LiveCollectionViewCell: UICollectionViewCell{ var showPlayButton = true var number = Int() var secondNumber = Int() @IBOutlet weak var playBt: UIButton! @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var heartBt: UIButton! @IBAction func heartBt(sender: UIButton) { var btn : NSInteger btn = sender.tag as NSInteger let uValues = url[btn] let iValues = image[btn] if MutableArray[btn] as! String == "rheart" { showPlayButton = false } if showPlayButton == true{ //Add this Line MutableArray.replaceObjectAtIndex(btn, withObject: "rheart") u.append(url[btn]) i.append(image[btn]) self.heartBt.setImage(UIImage(named: "rheart"), forState: UIControlState.Normal) showPlayButton = false print("rHeart xxxxxxxxxxxxxxx") }else{ //Add this Line MutableArray.replaceObjectAtIndex(btn, withObject: "wHeart") for check in u { number++ print(number) if uValues == check{ print(u) u.removeAtIndex(number-1) number = 0 print("RemoVe at indext path") print(u) break } } for check2 in i{ secondNumber++ print(secondNumber) if iValues == check2{ print(i) i.removeAtIndex(secondNumber-1) secondNumber = 0 print("RemoVe at indext path") print(i) self.heartBt.setImage(UIImage(named: "wHeart"), forState: UIControlState.Normal) showPlayButton = true print("wHeart ........") break } } } //Set the array to userdefault defaults.setObject(MutableArray, forKey: "Fav_Unfav") defaults.setObject(u, forKey: "u") defaults.setObject(i, forKey: "i") defaults.synchronize() } } 
  3. FavoriteTvViewController.swift:

     override func viewWillAppear(animated: Bool) { collectionView.reloadData() if let CheckURL = defaults.objectForKey("u") { uV = CheckURL.mutableCopy() as! NSArray } if let CheckImage = defaults.objectForKey("i"){ iV = CheckImage.mutableCopy() as! NSArray } print("uV values.. \(uV)") print("iV values.. \(iV)") }