Ios 正在尝试为“在收藏夹列表中添加项目”创建收藏夹按钮

Ios 正在尝试为“在收藏夹列表中添加项目”创建收藏夹按钮,ios,swift,swift2,nsuserdefaults,Ios,Swift,Swift2,Nsuserdefaults,我正在尝试在CollectionViewCell上创建收藏按钮,用于保存收藏列表中的项目。当我点击favorite图标按钮时,它成功地将选定的单元格项添加到favorite list类的数组中,并显示在favorite list中。当我点击“收藏夹”按钮时,它会根据是否已保存的值更改其图像。 当我试图在NSUserDefaults中保存收藏夹列表数组时,它会在检索时保存并显示值。但当我从模拟器关闭我的应用程序并再次运行时,它不会显示我保存在NSUserDefaults中的favorite列表数组

我正在尝试在CollectionViewCell上创建收藏按钮,用于保存收藏列表中的项目。当我点击favorite图标按钮时,它成功地将选定的单元格项添加到favorite list类的数组中,并显示在favorite list中。当我点击“收藏夹”按钮时,它会根据是否已保存的值更改其图像。 当我试图在NSUserDefaults中保存收藏夹列表数组时,它会在检索时保存并显示值。但当我从模拟器关闭我的应用程序并再次运行时,它不会显示我保存在NSUserDefaults中的favorite列表数组中的值,并且还希望根据是否已添加的项设置按钮图像状态

当我点击收藏夹时。并在关闭我的应用程序后再次运行。 谁能告诉我怎样才能解决这个问题。或者谁能帮我把它修好 谢谢





我已经检查了你的样本项目,我做了一个小的改变,现在它的工作良好

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之前,请检查其可用性。现在它工作正常。请尝试一下,并让我知道响应

编辑: 我已经编辑了你的代码,现在它工作得很好,我听到的列表中列出了我所做的所有更改

  • 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)
    
  • 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()
       }
    }
    
    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)")
    }
    
  • FavoriteTvViewController.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()
       }
    }
    
    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)")
    }
    

  • 我已经检查了你的样本项目,我做了一个小的改变,现在它的工作良好

    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之前,请检查其可用性。现在它工作正常。请尝试一下,并让我知道响应

    编辑: 我已经编辑了你的代码,现在它工作得很好,我听到的列表中列出了我所做的所有更改

  • 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)
    
  • 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()
       }
    }
    
    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)")
    }
    
  • FavoriteTvViewController.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()
       }
    }
    
    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)")
    }
    

  • 请将图片上传到SO,而不是在google drive中共享(链接可能在几个月前断开,但除非您将其删除,否则人们会看到这个问题)我的个人资料声誉低于10我如何才能上传到SO?请将图片上传到SO,而不是在google drive中共享(链接可能在几个月前被破坏,但人们会看到这个问题,除非你删除它)我的个人资料声誉低于10我怎么能上传到这样的网站上?